Hibernate SVN: r14116 - in core/trunk/documentation/manual/en-US/src/main/docbook: content and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2007-10-19 00:53:10 -0400 (Fri, 19 Oct 2007)
New Revision: 14116
Modified:
core/trunk/documentation/manual/en-US/src/main/docbook/Hibernate_Reference.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/architecture.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/association_mapping.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/basic_mapping.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/best_practices.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/collection_mapping.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/component_mapping.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/configuration.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/events.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/example_mappings.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/example_parentchild.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/example_weblog.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/filters.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/inheritance_mapping.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/performance.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/persistent_classes.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/preface.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/query_criteria.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/query_hql.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/query_sql.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/session_api.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/toolset_guide.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/transactions.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/tutorial.xml
core/trunk/documentation/manual/en-US/src/main/docbook/content/xml.xml
core/trunk/documentation/manual/en-US/src/main/docbook/legal_notice.xml
Log:
prep for gettext conversion
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/Hibernate_Reference.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/Hibernate_Reference.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/Hibernate_Reference.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!--
~ Copyright (c) 2007, Red Hat Middleware, LLC. All rights reserved.
~
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/architecture.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/architecture.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/architecture.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<!--
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/association_mapping.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/association_mapping.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/association_mapping.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="associations">
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/basic_mapping.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/basic_mapping.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/basic_mapping.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,7 +1,5 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
- <!ENTITY mdash "-">
-]>
+<?xml version='1.0' encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="mapping">
<title>Basic O/R Mapping</title>
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/best_practices.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/best_practices.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/best_practices.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="best-practices" revision="3">
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/collection_mapping.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/collection_mapping.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/collection_mapping.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="collections">
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/component_mapping.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/component_mapping.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/component_mapping.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="components">
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/configuration.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/configuration.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/configuration.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,7 +1,5 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
- <!ENTITY mdash "-">
-]>
+<?xml version='1.0' encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="session-configuration" revision="1">
<title>Configuration</title>
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/events.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/events.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/events.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="events">
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/example_mappings.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/example_mappings.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/example_mappings.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<!--
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/example_parentchild.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/example_parentchild.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/example_parentchild.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="example-parentchild">
@@ -361,4 +361,4 @@
</sect1>
-</chapter>
\ No newline at end of file
+</chapter>
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/example_weblog.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/example_weblog.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/example_weblog.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="example-weblog">
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/filters.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/filters.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/filters.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="filters">
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/inheritance_mapping.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/inheritance_mapping.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/inheritance_mapping.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="inheritance">
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/performance.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/performance.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/performance.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="performance">
@@ -1388,4 +1388,4 @@
</sect1>
-</chapter>
\ No newline at end of file
+</chapter>
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/persistent_classes.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/persistent_classes.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/persistent_classes.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="persistent-classes" revision="2">
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/preface.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/preface.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/preface.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,6 @@
-<?xml version='1.0'?>
+<?xml version='1.0' encoding="UTF-8"?>
+<!DOCTYPE preface PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<!--
~ Copyright (c) 2007, Red Hat Middleware, LLC. All rights reserved.
~
@@ -14,7 +16,6 @@
~
~ Red Hat Author(s): Steve Ebersole
-->
-<!DOCTYPE preface PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<preface id="preface">
<title>Preface</title>
@@ -120,4 +121,4 @@
JBoss Enterprise Middleware System (JEMS) suite of products.
</para>
-</preface>
\ No newline at end of file
+</preface>
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/query_criteria.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/query_criteria.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/query_criteria.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="querycriteria">
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/query_hql.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/query_hql.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/query_hql.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="queryhql" revision="1">
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/query_sql.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/query_sql.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/query_sql.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="querysql" revision="2">
@@ -757,4 +757,4 @@
WHERE ID=?
</sql-query>]]></programlisting>
</sect1>
-</chapter>
\ No newline at end of file
+</chapter>
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/session_api.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/session_api.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/session_api.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="objectstate">
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/toolset_guide.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/toolset_guide.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/toolset_guide.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="toolsetguide" revision="2">
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/transactions.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/transactions.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/transactions.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="transactions" revision="2">
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/tutorial.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/tutorial.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/tutorial.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY mdash "-">
]>
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/content/xml.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/content/xml.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/content/xml.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="xml">
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/legal_notice.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/legal_notice.xml 2007-10-19 04:52:33 UTC (rev 14115)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/legal_notice.xml 2007-10-19 04:53:10 UTC (rev 14116)
@@ -1,4 +1,4 @@
-<?xml version='1.0'?>
+<?xml version='1.0' encoding="UTF-8"?>
<!--
~ Copyright (c) 2007, Red Hat Middleware, LLC. All rights reserved.
~
@@ -49,4 +49,4 @@
<para>
CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E
</para>
-</legalnotice>
\ No newline at end of file
+</legalnotice>
17 years, 2 months
Hibernate SVN: r14115 - in core/trunk/documentation/manual/es-ES/src/main/docbook: content and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2007-10-19 00:52:33 -0400 (Fri, 19 Oct 2007)
New Revision: 14115
Modified:
core/trunk/documentation/manual/es-ES/src/main/docbook/Hibernate_Reference.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/architecture.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/association_mapping.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/basic_mapping.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/batch.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/best_practices.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/collection_mapping.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/component_mapping.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/configuration.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/events.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_mappings.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_parentchild.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_weblog.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/filters.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/inheritance_mapping.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/performance.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/persistent_classes.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/preface.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_criteria.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_hql.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_sql.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/quickstart.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/session_api.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/toolset_guide.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/transactions.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/tutorial.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/xml.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/legal_notice.xml
Log:
prep for gettext conversion
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/Hibernate_Reference.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/Hibernate_Reference.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/Hibernate_Reference.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,19 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
-<!--
- ~ Copyright (c) 2007, Red Hat Middleware, LLC. All rights reserved.
- ~
- ~ This copyrighted material is made available to anyone wishing to use, modify,
- ~ copy, or redistribute it subject to the terms and conditions of the GNU
- ~ Lesser General Public License, v. 2.1. This program is distributed in the
- ~ hope that it will be useful, but WITHOUT A WARRANTY; without even the implied
- ~ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- ~ Lesser General Public License for more details. You should have received a
- ~ copy of the GNU Lesser General Public License, v.2.1 along with this
- ~ distribution; if not, write to the Free Software Foundation, Inc.,
- ~ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- ~
- ~ Red Hat Author(s): Steve Ebersole
- -->
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY versionNumber "3.3.0.alpha1">
<!ENTITY copyrightYear "2004">
@@ -47,13 +32,13 @@
<xi:include href="content/preface.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="content/tutorial.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="content/tutorial.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="content/architecture.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="content/architecture.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="content/configuration.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="content/configuration.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="content/persistent_classes.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="content/persistent_classes.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/basic_mapping.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/collection_mapping.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/architecture.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/architecture.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/architecture.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="architecture">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/association_mapping.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/association_mapping.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/association_mapping.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="associations">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/basic_mapping.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/basic_mapping.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/basic_mapping.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="mapping">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/batch.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/batch.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/batch.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="batch">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/best_practices.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/best_practices.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/best_practices.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="best-practices" revision="3">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/collection_mapping.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/collection_mapping.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/collection_mapping.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="collections">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/component_mapping.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/component_mapping.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/component_mapping.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="components">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/configuration.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/configuration.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/configuration.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="session-configuration" revision="1">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/events.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/events.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/events.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="events">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_mappings.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_mappings.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_mappings.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="example-mappings">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_parentchild.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_parentchild.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_parentchild.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="example-parentchild">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_weblog.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_weblog.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_weblog.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="example-weblog">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/filters.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/filters.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/filters.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="filters">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/inheritance_mapping.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/inheritance_mapping.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/inheritance_mapping.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="inheritance">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/performance.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/performance.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/performance.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="performance">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/persistent_classes.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/persistent_classes.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/persistent_classes.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="persistent-classes" revision="2">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/preface.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/preface.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/preface.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE preface PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<preface id="preface" revision="2">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_criteria.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_criteria.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_criteria.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="querycriteria">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_hql.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_hql.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_hql.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="queryhql">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_sql.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_sql.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_sql.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="querysql" revision="2">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/quickstart.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/quickstart.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/quickstart.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="quickstart">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/session_api.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/session_api.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/session_api.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="objectstate">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/toolset_guide.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/toolset_guide.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/toolset_guide.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="toolsetguide" revision="2">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/transactions.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/transactions.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/transactions.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="transactions" revision="1">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/tutorial.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/tutorial.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/tutorial.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="tutorial">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/xml.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/xml.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/xml.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="xml">
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/legal_notice.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/legal_notice.xml 2007-10-19 04:36:47 UTC (rev 14114)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/legal_notice.xml 2007-10-19 04:52:33 UTC (rev 14115)
@@ -1,4 +1,4 @@
-<?xml version='1.0'?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE legalnotice PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<!--
@@ -49,4 +49,4 @@
<para>
CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E
</para>
-</legalnotice>
\ No newline at end of file
+</legalnotice>
17 years, 2 months
Hibernate SVN: r14114 - in core/trunk/documentation/manual/fr-FR/src/main/docbook: content and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2007-10-19 00:36:47 -0400 (Fri, 19 Oct 2007)
New Revision: 14114
Removed:
core/trunk/documentation/manual/fr-FR/src/main/docbook/translators.xml
Modified:
core/trunk/documentation/manual/fr-FR/src/main/docbook/Hibernate_Reference.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/architecture.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/association_mapping.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/basic_mapping.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/batch.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/best_practices.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/collection_mapping.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/component_mapping.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/configuration.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/events.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/example_mappings.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/example_parentchild.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/example_weblog.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/filters.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/inheritance_mapping.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/performance.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/persistent_classes.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/preface.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/query_criteria.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/query_hql.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/query_sql.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/session_api.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/toolset_guide.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/transactions.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/tutorial.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/content/xml.xml
core/trunk/documentation/manual/fr-FR/src/main/docbook/legal_notice.xml
Log:
prep for gettext conversion
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/Hibernate_Reference.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/Hibernate_Reference.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/Hibernate_Reference.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY versionNumber "3.3.0.alpha1">
<!ENTITY copyrightYear "2004">
@@ -9,7 +9,7 @@
<bookinfo>
<title>HIBERNATE - Persistance relationnelle en Java standard</title>
- <subtitle>Documentation de r�f�rence d'Hibernate</subtitle>
+ <subtitle>Documentation de référence d'Hibernate</subtitle>
<releaseinfo>&versionNumber;</releaseinfo>
<productnumber>&versionNumber;</productnumber>
<issuenum>1</issuenum>
@@ -25,7 +25,6 @@
<year>©rightYear;</year>
<holder>©rightHolder;</holder>
</copyright>
- <xi:include href="translators.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="legal_notice.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
</bookinfo>
@@ -33,13 +32,13 @@
<xi:include href="content/preface.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="content/tutorial.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="content/tutorial.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="content/architecture.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="content/architecture.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="content/configuration.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="content/configuration.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="content/persistent_classes.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="content/persistent_classes.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/basic_mapping.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/collection_mapping.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/architecture.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/architecture.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/architecture.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,28 +1,15 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
- ~ Copyright (c) 2007, Red Hat Middleware, LLC. All rights reserved.
- ~
- ~ This copyrighted material is made available to anyone wishing to use, modify,
- ~ copy, or redistribute it subject to the terms and conditions of the GNU
- ~ Lesser General Public License, v. 2.1. This program is distributed in the
- ~ hope that it will be useful, but WITHOUT A WARRANTY; without even the implied
- ~ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- ~ Lesser General Public License for more details. You should have received a
- ~ copy of the GNU Lesser General Public License, v.2.1 along with this
- ~ distribution; if not, write to the Free Software Foundation, Inc.,
- ~ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- ~
- ~ Red Hat Author(s): Steve Ebersole
- -->
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="architecture">
<title>Architecture</title>
<sect1 id="architecture-overview" revision="1">
- <title>G�n�ralit�s</title>
+ <title>Généralités</title>
<para>
- Voici une vue (tr�s) haut niveau de l'architecture d'Hibernate :
+ Voici une vue (très) haut niveau de l'architecture d'Hibernate :
</para>
<mediaobject>
@@ -35,16 +22,16 @@
</mediaobject>
<para>
- Ce diagramme montre Hibernate utilisant une base de donn�es et des donn�es
+ 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.
+ persistants) à l'application.
</para>
<para>
- 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
+ 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 :
</para>
@@ -58,8 +45,8 @@
</mediaobject>
<para>
- L'architecture la plus compl�te abstrait l'application des APIs JDBC/JTA
- sous-jacentes et laisse Hibernate s'occuper des d�tails.
+ L'architecture la plus complète abstrait l'application des APIs JDBC/JTA
+ sous-jacentes et laisse Hibernate s'occuper des détails.
</para>
<mediaobject>
@@ -72,7 +59,7 @@
</mediaobject>
<para>
- Voici quelques d�finitions des objets des diagrammes :
+ Voici quelques définitions des objets des diagrammes :
<variablelist spacing="compact">
<varlistentry>
@@ -80,10 +67,10 @@
<listitem>
<para>
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 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.
+ 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.
</para>
</listitem>
</varlistentry>
@@ -91,11 +78,11 @@
<term>Session (<literal>org.hibernate.Session</literal>)</term>
<listitem>
<para>
- 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.
+ 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
+ utilisé lors de la navigation dans le graphe d'objets ou lors de la récupération
d'objets par leur identifiant.
</para>
</listitem>
@@ -104,13 +91,13 @@
<term>Objets et Collections persistants</term>
<listitem>
<para>
- 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).
+ 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).
</para>
</listitem>
</varlistentry>
@@ -118,10 +105,10 @@
<term>Objets et collections transients</term>
<listitem>
<para>
- 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.
+ 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.
</para>
</listitem>
</varlistentry>
@@ -129,11 +116,11 @@
<term>Transaction (<literal>org.hibernate.Transaction</literal>)</term>
<listitem>
<para>
- (Optionnel) Un objet mono-thread� � vie courte utilis� par l'application
- pour d�finir une unit� de travail atomique. Abstrait l'application des
+ (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
+ 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!
</para>
</listitem>
@@ -144,7 +131,7 @@
<para>
(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.
+ Non exposé à l'application, mais peut être étendu/implémenté par le développeur.
</para>
</listitem>
</varlistentry>
@@ -153,7 +140,7 @@
<listitem>
<para>
(Optionnel) Une fabrique d'instances de <literal>Transaction</literal>. Non
- expos� � l'application, mais peut �tre �tendu/impl�ment� par le d�veloppeur.
+ exposé à l'application, mais peut être étendu/implémenté par le développeur.
</para>
</listitem>
</varlistentry>
@@ -162,8 +149,8 @@
<listitem>
<para>
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.
+ 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.
</para>
</listitem>
</varlistentry>
@@ -171,7 +158,7 @@
</para>
<para>
- Dans une architecture l�g�re, l'application n'aura pas � utiliser les APIs
+ 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.
@@ -181,9 +168,9 @@
<sect1 id="architecture-states" revision="1">
<title>Etats des instances</title>
<para>
- 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
+ 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 :
</para>
@@ -192,8 +179,8 @@
<term>passager (transient)</term>
<listitem>
<para>
- 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)
+ 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)
</para>
</listitem>
</varlistentry>
@@ -201,26 +188,26 @@
<term>persistant</term>
<listitem>
<para>
- 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.
+ 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)
+ <emphasis>garantit</emphasis> que l'identité persistante
+ est équivalente à l'identité Java (emplacement mémoire de l'objet)
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>d�tach�</term>
+ <term>détaché</term>
<listitem>
<para>
- 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.
+ 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.
</para>
</listitem>
</varlistentry>
@@ -228,39 +215,39 @@
</sect1>
<sect1 id="architecture-jmx" revision="1">
- <title>Int�gration JMX</title>
+ <title>Intégration JMX</title>
<para>
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
+ 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>.
</para>
<para>
- 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 :
+ 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 :
</para>
<itemizedlist>
<listitem>
<para>
<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.
+ 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
+ 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>.
+ Vous appelez l'<literal>HibernateContext</literal> pour accéder à la <literal>Session</literal>.
</para>
</listitem>
<listitem>
<para>
- <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),
+ <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.
+ 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.
</para>
</listitem>
</itemizedlist>
@@ -270,8 +257,8 @@
</para>
<para>
- Les statistiques pendant l'ex�cution d'Hibernate (au runtime) sont une
- autre fonctionnalit� disponible en tant que service JMX. Voyez pour cela
+ 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"/>.
</para>
</sect1>
@@ -279,46 +266,46 @@
<sect1 id="architecture-jca" revision="1">
<title>Support JCA</title>
<para>
- 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.
+ 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.
</para>
</sect1>
<sect1 id="architecture-current-session" revision="1">
<title>Sessions Contextuelles</title>
<para>
- 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>,
+ 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
+ framework tiers (comme Spring ou Pico) qui fournissaient des sessions contextuelles basées sur
l'utilisation de proxy/interception.
</para>
<para>
- 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> ,
+ 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.
+ 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.
</para>
<para>
- Cependant, depuis la version 3.1, la logique derri�re
- <literal>SessionFactory.getCurrentSession()</literal> est d�sormais branchable.
+ 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
+ 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.
</para>
<para>
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
+ 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.
</para>
@@ -326,38 +313,38 @@
<listitem>
<para>
<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.
+ 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.
</para>
</listitem>
<listitem>
<para>
<literal>org.hibernate.context.ThreadLocalSessionContext</literal> - les sessions
- courantes sont associ�es au thread d'ex�cution. Voir les javadocs pour les d�tails.
+ courantes sont associées au thread d'exécution. Voir les javadocs pour les détails.
</para>
</listitem>
</itemizedlist>
<para>
- 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
+ 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.
</para>
<para>
- 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".
+ 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".
</para>
</sect1>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/association_mapping.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/association_mapping.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/association_mapping.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,4 +1,6 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="associations">
<title>Mapper les associations</title>
@@ -7,27 +9,27 @@
<title>Introduction</title>
<para>
- 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.
+ 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>.
</para>
<para>
- 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.
+ 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.
</para>
<para>
- 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.
+ 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.
</para>
</sect1>
@@ -36,10 +38,10 @@
<title>Association unidirectionnelle</title>
<sect2 id="assoc-unidirectional-m21" >
- <title>plusieurs � un</title>
+ <title>plusieurs à un</title>
<para>
- Une <emphasis>association plusieurs-�-un (many-to-one) unidirectionnelle </emphasis>
+ Une <emphasis>association plusieurs-à-un (many-to-one) unidirectionnelle </emphasis>
est le type que l'on rencontre le plus souvent dans les associations unidirectionnelles.
</para>
@@ -66,12 +68,12 @@
</sect2>
<sect2 id="assoc-unidirectional-121">
- <title>un � un</title>
+ <title>un à un</title>
<para>
- 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.
+ 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.
</para>
<programlisting><![CDATA[<class name="Person">
@@ -95,8 +97,8 @@
]]></programlisting>
<para>
- 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
+ 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.)
</para>
@@ -122,11 +124,11 @@
</sect2>
<sect2 id="assoc-unidirectional-12m">
- <title>un � plusieurs</title>
+ <title>un à plusieurs</title>
<para>
- 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.
+ 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.
</para>
<programlisting><![CDATA[<class name="Person">
@@ -151,7 +153,7 @@
]]></programlisting>
<para>
- Nous pensons qu'il est pr�f�rable d'utiliser une table de jointure pour ce type d'association.
+ Nous pensons qu'il est préférable d'utiliser une table de jointure pour ce type d'association.
</para>
</sect2>
@@ -162,14 +164,14 @@
<title>Associations unidirectionnelles avec tables de jointure</title>
<sect2 id="assoc-unidirectional-join-12m">
- <title>un � plusieurs</title>
+ <title>un à plusieurs</title>
<para>
- Une <emphasis>association unidirectionnelle un-�-plusieurs (one-to-many) avec
+ 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).
+ 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).
</para>
<programlisting><![CDATA[<class name="Person">
@@ -198,11 +200,11 @@
</sect2>
<sect2 id="assoc-unidirectional-join-m21">
- <title>plusieurs � un</title>
+ <title>plusieurs à un</title>
<para>
- 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.
+ 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.
</para>
<programlisting><![CDATA[<class name="Person">
@@ -232,11 +234,11 @@
</sect2>
<sect2 id="assoc-unidirectional-join-121">
- <title>un � un</title>
+ <title>un à un</title>
<para>
- Une <emphasis>association unidirectionnelle un-�-un (one-to-one) sur une table
- de jointure</emphasis> est extr�mement rare mais envisageable.
+ Une <emphasis>association unidirectionnelle un-à-un (one-to-one) sur une table
+ de jointure</emphasis> est extrèmement rare mais envisageable.
</para>
<programlisting><![CDATA[<class name="Person">
@@ -268,10 +270,10 @@
</sect2>
<sect2 id="assoc-unidirectional-join-m2m">
- <title>plusieurs � plusieurs</title>
+ <title>plusieurs à plusieurs</title>
<para>
- Finallement, nous avons <emphasis>l'association unidirectionnelle plusieurs-�-plusieurs (many-to-many)</emphasis>.
+ Finallement, nous avons <emphasis>l'association unidirectionnelle plusieurs-à-plusieurs (many-to-many)</emphasis>.
</para>
<programlisting><![CDATA[<class name="Person">
@@ -304,11 +306,11 @@
<title>Associations bidirectionnelles</title>
<sect2 id="assoc-bidirectional-m21" revision="2">
- <title>un � plusieurs / plusieurs � un</title>
+ <title>un à plusieurs / plusieurs à un</title>
<para>
- 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
+ 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.)
</para>
@@ -337,10 +339,10 @@
]]></programlisting>
<para>
- 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
+ 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>):
</para>
@@ -367,11 +369,11 @@
</sect2>
<sect2 id="assoc-bidirectional-121">
- <title>Un � un</title>
+ <title>Un à un</title>
<para>
- Une <emphasis>association bidirectionnelle un � un (one-to-one) sur une cl� �trang�re</emphasis>
- est aussi tr�s fr�quente.
+ Une <emphasis>association bidirectionnelle un à un (one-to-one) sur une clé étrangère</emphasis>
+ est aussi très fréquente.
</para>
<programlisting><![CDATA[<class name="Person">
@@ -397,8 +399,8 @@
]]></programlisting>
<para>
- Une <emphasis>association bidirectionnelle un-�-un (one-to-one) sur une cl� primaire</emphasis>
- utilise un g�n�rateur particulier d'id.
+ Une <emphasis>association bidirectionnelle un-à-un (one-to-one) sur une clé primaire</emphasis>
+ utilise un générateur particulier d'id.
</para>
<programlisting><![CDATA[<class name="Person">
@@ -430,11 +432,11 @@
<title>Associations bidirectionnelles avec table de jointure</title>
<sect2 id="assoc-bidirectional-join-12m">
- <title>un � plusieurs / plusieurs � un</title>
+ <title>un à plusieurs / plusieurs à un</title>
<para>
- Une <emphasis>association bidirectionnelle un-�-plusieurs (one-to-many) sur une table de jointure </emphasis>.
- Remarquez que <literal>inverse="true"</literal> peut s'appliquer sur les deux extr�mit�s de l'
+ Une <emphasis>association bidirectionnelle un-à-plusieurs (one-to-many) sur une table de jointure </emphasis>.
+ Remarquez que <literal>inverse="true"</literal> peut s'appliquer sur les deux extrémités de l'
association, sur la collection, ou sur la jointure.
</para>
@@ -473,11 +475,11 @@
</sect2>
<sect2 id="assoc-bidirectional-join-121">
- <title>Un � un</title>
+ <title>Un à un</title>
<para>
- Une <emphasis>association bidirectionnelle un-�-un (one-to-one) sur une table de jointure</emphasis>
- est extr�mement rare mais envisageable.
+ Une <emphasis>association bidirectionnelle un-à-un (one-to-one) sur une table de jointure</emphasis>
+ est extrèmement rare mais envisageable.
</para>
<programlisting><![CDATA[<class name="Person">
@@ -519,10 +521,10 @@
</sect2>
<sect2 id="assoc-bidirectional-join-m2m" revision="1">
- <title>plusieurs � plusieurs</title>
+ <title>plusieurs à plusieurs</title>
<para>
- Finallement nous avons <emphasis>l'association bidirectionnelle plusieurs � plusieurs</emphasis>.
+ Finallement nous avons <emphasis>l'association bidirectionnelle plusieurs à plusieurs</emphasis>.
</para>
<programlisting><![CDATA[<class name="Person">
@@ -561,12 +563,12 @@
<title>Des mappings plus complexes</title>
<para>
- Des associations encore plus complexes sont <emphasis>extr�mement</emphasis> rares.
- Hibernate permet de g�rer des situations plus complexes en utilisant des
+ 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
+ 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:
+ et <literal>effectiveStartDate</literal>, mappées de telle sorte:
</para>
<programlisting><![CDATA[<properties name="currentAccountKey">
@@ -579,7 +581,7 @@
<property name="effectiveStateDate" type="date" not-null="true"/>]]></programlisting>
<para>
- alors nous pouvons mapper une association � l'instance <emphasis>courante</emphasis>
+ alors nous pouvons mapper une association à l'instance <emphasis>courante</emphasis>
(celle avec une <literal>effectiveEndDate</literal>) nulle en utilisant:
</para>
@@ -592,10 +594,10 @@
<para>
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:
+ <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:
</para>
<programlisting><![CDATA[<join>
@@ -612,8 +614,8 @@
</join>]]></programlisting>
<para>
- 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.
+ 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.
</para>
</sect1>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/basic_mapping.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/basic_mapping.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/basic_mapping.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,20 +1,22 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="mapping">
<title>Mapping O/R basique</title>
<sect1 id="mapping-declaration" revision="1">
- <title>D�claration de Mapping</title>
+ <title>Déclaration de Mapping</title>
<para>
- 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.
+ 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.
</para>
<para>
- 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,
+ 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.
</para>
- <para>D�marrons avec un exemple de mapping :</para>
+ <para>Démarrons avec un exemple de mapping :</para>
<programlisting id="mapping-declaration-ex1" revision="1"><![CDATA[<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
@@ -80,33 +82,33 @@
</hibernate-mapping>]]></programlisting>
<para>
- 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>.)
+ 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>.)
</para>
<sect2 id="mapping-declaration-doctype" revision="2">
<title>Doctype</title>
<para>
- Tous les mappings XML devraient utiliser le doctype indiqu�.
- Ce fichier est pr�sent � l'URL ci-dessus, dans le r�pertoire
+ 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
+ des recherches de la DTD sur Internet, vérifiez votre déclaration de DTD par rapport
au contenu de votre classpath.
</para>
</sect2>
<sect2 id="mapping-declaration-mapping" revision="3">
<title>hibernate-mapping</title>
<para>
- 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.
+ 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.
</para>
<programlistingco>
<areaspec>
@@ -130,69 +132,69 @@
<calloutlist>
<callout arearefs="hm1">
<para>
- <literal>schema</literal> (optionnel) : Le nom d'un sch�ma de base de donn�es.
+ <literal>schema</literal> (optionnel) : Le nom d'un schéma de base de données.
</para>
</callout>
<callout arearefs="hm2">
<para>
- <literal>catalog</literal> (optionnel) : Le nom d'un catalogue de base de donn�es.
+ <literal>catalog</literal> (optionnel) : Le nom d'un catalogue de base de données.
</para>
</callout>
<callout arearefs="hm3">
<para>
- <literal>default-cascade</literal> (optionnel - par d�faut vaut : <literal>none</literal>) :
- Un type de cascade par d�faut.
+ <literal>default-cascade</literal> (optionnel - par défaut vaut : <literal>none</literal>) :
+ Un type de cascade par défaut.
</para>
</callout>
<callout arearefs="hm4">
<para>
- <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>.
+ <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>.
</para>
</callout>
<callout arearefs="hm5">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="hm6">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="hm7">
<para>
- <literal>package</literal> (optionnel) : Pr�fixe de package par d�faut pour
- les noms de classe non qualifi�s du document de mapping.
+ <literal>package</literal> (optionnel) : Préfixe de package par défaut pour
+ les noms de classe non qualifiés du document de mapping.
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- Si deux classes poss�dent le m�me nom de classe (non qualifi�), vous devez indiquer
+ 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�.
+ si vous essayez d'assigner à deux classes le même nom importé.
</para>
<para>
- Notez que l'�l�ment <literal>hibernate-mapping</literal> vous permet d'imbriquer plusieurs mappings de
+ 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,
+ 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>.
</para>
</sect2>
<sect2 id="mapping-declaration-class" revision="3">
<title>class</title>
<para>
- D�clarez une classe persistante avec l'�l�ment <literal>class</literal> :
+ Déclarez une classe persistante avec l'élément <literal>class</literal> :
</para>
<programlistingco>
<areaspec>
@@ -247,111 +249,111 @@
<callout arearefs="class1">
<para>
<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.
+ Si cet attribut est absent, il est supposé que ce mapping ne se rapporte pas à une entité POJO.
</para>
</callout>
<callout arearefs="class2">
<para>
- <literal>table</literal> (optionnel - par d�faut le nom (non-qualifi�) de la classe) : Le
- nom de sa table en base de donn�es.
+ <literal>table</literal> (optionnel - par défaut le nom (non-qualifié) de la classe) : Le
+ nom de sa table en base de données.
</para>
</callout>
<callout arearefs="class3">
<para>
- <literal>discriminator-value</literal> (optionnel - par d�faut le nom de la classe) :
+ <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.
+ Les valeurs <literal>null</literal> et <literal>not null</literal> sont autorisées.
</para>
</callout>
<callout arearefs="class4">
<para>
- <literal>mutable</literal> (optionnel, vaut <literal>true</literal> par d�faut) : Sp�cifie
+ <literal>mutable</literal> (optionnel, vaut <literal>true</literal> par défaut) : Spécifie
que des instances de la classe sont (ou non) immuables.
</para>
</callout>
<callout arearefs="class5">
<para>
- <literal>schema</literal> (optionnel) : Surcharge le nom de sch�ma sp�cifi� par
- l'�l�ment racine <literal><hibernate-mapping></literal>.
+ <literal>schema</literal> (optionnel) : Surcharge le nom de schéma spécifié par
+ l'élément racine <literal><hibernate-mapping></literal>.
</para>
</callout>
<callout arearefs="class6">
<para>
- <literal>catalog</literal> (optionnel) : Surcharge le nom du catalogue sp�cifi� par
- l'�l�ment racine <literal><hibernate-mapping></literal>.
+ <literal>catalog</literal> (optionnel) : Surcharge le nom du catalogue spécifié par
+ l'élément racine <literal><hibernate-mapping></literal>.
</para>
</callout>
<callout arearefs="class7">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="class8">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="class9">
<para>
- <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
+ <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.
</para>
</callout>
<callout arearefs="class10">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="class11">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="class12">
<para>
- <literal>where</literal> (optionnel) sp�cifie une clause SQL <literal>WHERE</literal>
- � utiliser lorsque l'on r�cup�re des objets de cette classe.
+ <literal>where</literal> (optionnel) spécifie une clause SQL <literal>WHERE</literal>
+ à utiliser lorsque l'on récupère des objets de cette classe.
</para>
</callout>
<callout arearefs="class13">
<para>
- <literal>persister</literal> (optionnel) : Sp�cifie un <literal>ClassPersister</literal> particulier.
+ <literal>persister</literal> (optionnel) : Spécifie un <literal>ClassPersister</literal> particulier.
</para>
</callout>
<callout arearefs="class14">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="class15">
<para>
- <literal>optimistic-lock</literal> (optionnel, par d�faut = <literal>version</literal>) :
- D�termine la strat�gie de verrou optimiste.
+ <literal>optimistic-lock</literal> (optionnel, par défaut = <literal>version</literal>) :
+ Détermine la stratégie de verrou optimiste.
</para>
</callout>
<callout arearefs="class16">
<para>
- <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>.
+ <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>.
</para>
</callout>
<callout arearefs="class17">
<para>
- <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"/>
+ <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.
</para>
</callout>
@@ -363,112 +365,112 @@
</callout>
<callout arearefs="class19">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="class20">
<para>
<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�.
+ 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é.
</para>
</callout>
<callout arearefs="class21">
<para>
- <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
+ <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.
</para>
</callout>
<callout arearefs="class22">
<para>
- <literal>abstract</literal> (optionnel) : Utilis� pour marquer des superclasses abstraites dans
- des hi�rarchies de <literal><union-subclass></literal>.
+ <literal>abstract</literal> (optionnel) : Utilisé pour marquer des superclasses abstraites dans
+ des hiérarchies de <literal><union-subclass></literal>.
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- 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>.
+ 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>.
+ 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>.
</para>
<para>
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.
+ pas être modifiées ou supprimées par l'application. Cela permet
+ à Hibernate de faire quelques optimisations mineures sur les performances.
</para>
<para>
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).
+ 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).
</para>
<para>
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
+ 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
+ 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,
+ 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
+ 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).
</para>
<para>
L'attribut <literal>persister</literal> vous permet de customiser
- la strat�gie utilis�e pour la classe. Vous pouvez, par exemple, sp�cifier
+ 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.
+ 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>).
</para>
<para>
- 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,
+ 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.
</para>
<para>
- 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>.
+ 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>.
</para>
<para>
- Si vous utilisez le <literal>dynamic-update</literal>, les diff�rentes
- strat�gies de verrouillage optimiste (optimistic locking) sont les suivantes:
+ Si vous utilisez le <literal>dynamic-update</literal>, les différentes
+ stratégies de verrouillage optimiste (optimistic locking) sont les suivantes:
</para>
<itemizedlist>
<listitem>
<para>
- <literal>version</literal> v�rifie les colonnes version/timestamp
+ <literal>version</literal> vérifie les colonnes version/timestamp
</para>
</listitem>
<listitem>
<para>
- <literal>all</literal> v�rifie toutes les colonnes
+ <literal>all</literal> vérifie toutes les colonnes
</para>
</listitem>
<listitem>
<para>
- <literal>dirty</literal> v�rifie les colonnes modifi�es, permettant des updates concurrents
+ <literal>dirty</literal> vérifie les colonnes modifiées, permettant des updates concurrents
</para>
</listitem>
<listitem>
@@ -478,20 +480,20 @@
</listitem>
</itemizedlist>
<para>
- Nous encourageons <emphasis>tr�s</emphasis> fortement l'utilisation
+ 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>).
+ 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>).
</para>
<para>
- 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
+ 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�:
+ 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é:
</para>
<programlisting><![CDATA[<class name="Summary">
<subselect>
@@ -506,22 +508,22 @@
...
</class>]]></programlisting>
<para>
- D�clarez les tables � synchroniser avec cette entit� pour assurer
+ 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.
+ 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.
</para>
</sect2>
<sect2 id="mapping-declaration-id" revision="4">
<title>id</title>
<para>
- 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.
+ 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.
</para>
<programlistingco>
<areaspec>
@@ -543,7 +545,7 @@
<calloutlist>
<callout arearefs="id1">
<para>
- <literal>name</literal> (optionnel) : Nom de la propri�t� qui sert d'identifiant.
+ <literal>name</literal> (optionnel) : Nom de la propriété qui sert d'identifiant.
</para>
</callout>
<callout arearefs="id2">
@@ -553,44 +555,44 @@
</callout>
<callout arearefs="id3">
<para>
- <literal>column</literal> (optionnel - le nom de la propri�t� est pris par d�faut) : Nom de la clef primaire.
+ <literal>column</literal> (optionnel - le nom de la propriété est pris par défaut) : Nom de la clef primaire.
</para>
</callout>
<callout arearefs="id4">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="id5">
<para>
- <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.
+ <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.
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- Si l'attribut <literal>name</literal> est absent, Hibernate consid�re que la classe ne poss�de pas de propri�t� identifiant.
+ Si l'attribut <literal>name</literal> est absent, Hibernate considère que la classe ne possède pas de propriété identifiant.
</para>
<para>
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.
+ 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.
</para>
<para>
- 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.
+ 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.
</para>
<sect3 id="mapping-declaration-id-generator" revision="2">
<title>Generator</title>
<para>
- 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>.
+ 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>.
</para>
<programlisting><![CDATA[<id name="id" type="long" column="cat_id">
<generator class="org.hibernate.id.TableHiLoGenerator">
@@ -599,9 +601,9 @@
</generator>
</id>]]></programlisting>
<para>
- 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 :
+ 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 :
<variablelist>
<varlistentry>
<term>
@@ -609,9 +611,9 @@
</term>
<listitem>
<para>
- 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>
+ 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>
</para>
</listitem>
</varlistentry>
@@ -622,7 +624,7 @@
<listitem>
<para>
Utilisation de la colonne identity de DB2, MySQL, MS SQL Server, Sybase et
- HypersonicSQL. L'identifiant renvoy� est de type <literal>long</literal>,
+ HypersonicSQL. L'identifiant renvoyé est de type <literal>long</literal>,
<literal>short</literal> ou <literal>int</literal>.
</para>
</listitem>
@@ -633,8 +635,8 @@
</term>
<listitem>
<para>
- 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>,
+ 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>
</para>
</listitem>
@@ -645,12 +647,12 @@
</term>
<listitem>
<para id="mapping-declaration-id-hilodescription" revision="1">
- Utilise un algorithme hi/lo pour g�n�rer de fa�on efficace des identifiants de type
+ 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
+ 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.
+ <literal>next_hi</literal> respectivement). L'algorithme hi/lo génère des identifiants uniques
+ pour une base de données particulière seulement.
</para>
</listitem>
</varlistentry>
@@ -660,8 +662,8 @@
</term>
<listitem>
<para>
- 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.
+ 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.
</para>
</listitem>
</varlistentry>
@@ -671,9 +673,9 @@
</term>
<listitem>
<para>
- 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.
+ 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.
</para>
</listitem>
</varlistentry>
@@ -683,7 +685,7 @@
</term>
<listitem>
<para>
- Utilise une cha�ne GUID g�n�r�e par la base pour MS SQL Server et MySQL.
+ Utilise une chaîne GUID générée par la base pour MS SQL Server et MySQL.
</para>
</listitem>
</varlistentry>
@@ -694,7 +696,7 @@
<listitem>
<para>
Choisit <literal>identity</literal>, <literal>sequence</literal> ou
- <literal>hilo</literal> selon les possibilit�s offertes par la base de donn�es sous-jacente.
+ <literal>hilo</literal> selon les possibilités offertes par la base de données sous-jacente.
</para>
</listitem>
</varlistentry>
@@ -704,9 +706,9 @@
</term>
<listitem>
<para>
- 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�.
+ 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é.
</para>
</listitem>
</varlistentry>
@@ -716,7 +718,7 @@
</term>
<listitem>
<para>
- R�cup�re une clef primaire assign�e par un trigger en s�lectionnant
+ Récupère une clef primaire assignée par un trigger en sélectionnant
la ligne par une clef unique quelconque.
</para>
</listitem>
@@ -727,7 +729,7 @@
</term>
<listitem>
<para>
- Utilise l'identifiant d'un objet associ�. Habituellement utilis� en conjonction
+ Utilise l'identifiant d'un objet associé. Habituellement utilisé en conjonction
avec une association <literal><one-to-one></literal> sur la clef primaire.
</para>
</listitem>
@@ -738,10 +740,10 @@
<sect3 id="mapping-declaration-id-hilo" revision="1">
<title>algorithme Hi/lo</title>
<para>
- 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).
+ 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).
</para>
<programlisting><![CDATA[<id name="id" type="long" column="cat_id">
<generator class="hilo">
@@ -758,7 +760,7 @@
</id>]]></programlisting>
<para>
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
+ 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>.
</para>
@@ -766,19 +768,19 @@
<sect3 id="mapping-declaration-id-uuid">
<title>UUID algorithm</title>
<para>
- 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.
+ 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.
</para>
</sect3>
<sect3 id="mapping-declaration-id-sequences">
- <title>Colonnes identifiantes et s�quences</title>
+ <title>Colonnes identifiantes et séquences</title>
<para>
- 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.
+ 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.
</para>
<programlisting><![CDATA[<id name="id" type="long" column="person_id">
<generator class="sequence">
@@ -788,32 +790,32 @@
<programlisting><![CDATA[<id name="id" type="long" column="person_id" unsaved-value="0">
<generator class="identity"/>
</id>]]></programlisting>
- <para>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.
+ <para>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.
</para>
</sect3>
<sect3 id="mapping-declaration-id-assigned">
- <title>Identifiants assign�s</title>
+ <title>Identifiants assignés</title>
<para>
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>.
+ à 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>.
</para>
<para>
- 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
+ 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>.
</para>
</sect3>
<sect3 id="mapping-declaration-id-select">
- <title>Clefs primaires assign�es par trigger</title>
+ <title>Clefs primaires assignées par trigger</title>
<para>
- 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)
+ 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)
</para>
<programlisting><![CDATA[<id name="id" type="long" column="person_id">
<generator class="select">
@@ -822,8 +824,8 @@
</id>]]></programlisting>
<para>
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.
+ 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.
</para>
</sect3>
</sect2>
@@ -841,9 +843,9 @@
......
</composite-id>]]></programlisting>
<para>
- 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
+ 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.
</para>
<programlisting><![CDATA[<composite-id>
@@ -851,23 +853,23 @@
<key-property name="dependent"/>
</composite-id>]]></programlisting>
<para>
- 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
+ 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>.
</para>
<para>
- 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>"
+ 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.
</para>
<para>
- 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.
+ 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.
</para>
<programlisting><![CDATA[<composite-id class="MedicareId" mapped="true">
@@ -876,71 +878,71 @@
</composite-id>]]></programlisting>
<para>
- 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
+ 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.
</para>
<para>
- Les attributs suivants servent � configurer un identifiant compos� mapp� :
+ Les attributs suivants servent à configurer un identifiant composé mappé :
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- <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).
+ <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).
</para>
</listitem>
<listitem>
<para>
- <literal>class</literal> (optionnel, mais requis pour un identifiant compos� mapp�) :
- La classe composant utilis�e comme identifiant compos�.
+ <literal>class</literal> (optionnel, mais requis pour un identifiant composé mappé) :
+ La classe composant utilisée comme identifiant composé.
</para>
</listitem>
</itemizedlist>
<para>
- 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 :
+ 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 :
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- <literal>name</literal> (optionnel, requis pour cette approche) : une propri�t� de type
- composant qui contient l'identifiant compos� (voir chapitre 9).
+ <literal>name</literal> (optionnel, requis pour cette approche) : une propriété de type
+ composant qui contient l'identifiant composé (voir chapitre 9).
</para>
</listitem>
<listitem>
<para>
- <literal>access</literal> (optionnel - d�faut � <literal>property</literal>) :
- La strat�gie qu'Hibernate utilisera pour acc�der � la valeur de la propri�t�.
+ <literal>access</literal> (optionnel - défaut à <literal>property</literal>) :
+ La stratégie qu'Hibernate utilisera pour accéder à la valeur de la propriété.
</para>
</listitem>
<listitem>
<para>
- <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).
+ <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).
</para>
</listitem>
</itemizedlist>
<para>
- Cette derni�re approche est celle que nous recommandons pour toutes vos applications.
+ Cette dernière approche est celle que nous recommandons pour toutes vos applications.
</para>
</sect2>
<sect2 id="mapping-declaration-discriminator" revision="3">
<title>discriminator</title>
<para>
- 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 :
+ 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>.
@@ -963,51 +965,51 @@
<calloutlist>
<callout arearefs="discriminator1">
<para>
- <literal>column</literal> (optionnel - par d�faut � <literal>class</literal>) le
+ <literal>column</literal> (optionnel - par défaut à <literal>class</literal>) le
nom de la colonne discriminante.
</para>
</callout>
<callout arearefs="discriminator2">
<para>
- <literal>type</literal> (optionnel - par d�faut � <literal>string</literal>) un nom
+ <literal>type</literal> (optionnel - par défaut à <literal>string</literal>) un nom
indiquant le type Hibernate.
</para>
</callout>
<callout arearefs="discriminator3">
<para>
- <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
+ <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.
</para>
</callout>
<callout arearefs="discriminator4">
<para>
- <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
+ <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).
</para>
</callout>
<callout arearefs="discriminator5">
<para>
- <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.
+ <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.
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- 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
+ 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>.
</para>
<para>
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.
+ valeurs "extra" discriminantes qui ne sont pas mappées à une classe persistante. Ce ne sera généralement pas le cas.
</para>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[<discriminator
formula="case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end"
@@ -1016,8 +1018,8 @@
<sect2 id="mapping-declaration-version" revision="4">
<title>version (optionnel)</title>
<para>
- 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
+ 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).
</para>
<programlistingco>
@@ -1043,8 +1045,8 @@
<calloutlist>
<callout arearefs="version1">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="version2">
@@ -1054,62 +1056,62 @@
</callout>
<callout arearefs="version3">
<para>
- <literal>type</literal> (optionnel - par d�faut � <literal>integer</literal>) :
- Le type du num�ro de version.
+ <literal>type</literal> (optionnel - par défaut à <literal>integer</literal>) :
+ Le type du numéro de version.
</para>
</callout>
<callout arearefs="version4">
<para>
- <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�.
+ <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é.
</para>
</callout>
<callout arearefs="version5">
<para>
- <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�).
+ <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é).
</para>
</callout>
<callout arearefs="version6">
<para>
- <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
+ <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</xref>.
</para>
</callout>
<callout arearefs="version7">
<para>
- <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>.
+ <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>.
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- Les num�ros de version doivent avoir les types Hibernate <literal>long</literal>, <literal>integer</literal>,
+ 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>.
</para>
<para>
- 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>
+ 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>
</para>
</sect2>
<sect2 id="mapping-declaration-timestamp" revision="3" >
<title>timestamp (optionnel)</title>
<para>
- 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.
+ 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.
</para>
<programlistingco>
<areaspec>
@@ -1132,60 +1134,60 @@
<calloutlist>
<callout arearefs="timestamp1">
<para>
- <literal>column</literal> (optionnel - par d�faut � le nom de la propri�t�) : Le nom d'une colonne
+ <literal>column</literal> (optionnel - par défaut à le nom de la propriété) : Le nom d'une colonne
contenant le timestamp.
</para>
</callout>
<callout arearefs="timestamp2">
<para>
- <literal>name</literal> : Le nom d'une propri�t� au sens JavaBean de type
+ <literal>name</literal> : Le nom d'une propriété au sens JavaBean de type
<literal>Date</literal> ou <literal>Timestamp</literal> de la classe persistante.
</para>
</callout>
<callout arearefs="timestamp3">
<para>
- <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�.
+ <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é.
</para>
</callout>
<callout arearefs="timestamp4">
<para>
- <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).
+ <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).
</para>
</callout>
<callout arearefs="timestamp5">
<para>
- <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).
+ <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).
</para>
</callout>
<callout arearefs="timestamp6">
<para>
- <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
+ <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</xref>.
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- Notez que <literal><timestamp></literal> est �quivalent �
+ Notez que <literal><timestamp></literal> est équivalent à
<literal><version type="timestamp"></literal>.
</para>
</sect2>
<sect2 id="mapping-declaration-property" revision="4">
<title>property</title>
<para>
- L'�l�ment <literal><property></literal> d�clare une propri�t� de la classe au sens JavaBean.
+ L'élément <literal><property></literal> déclare une propriété de la classe au sens JavaBean.
</para>
<programlistingco>
<areaspec>
@@ -1227,13 +1229,13 @@
<calloutlist>
<callout arearefs="property1">
<para>
- <literal>name</literal> : nom de la propri�t�, avec une lettre initiale en minuscule.
+ <literal>name</literal> : nom de la propriété, avec une lettre initiale en minuscule.
</para>
</callout>
<callout arearefs="property2">
<para>
- <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> (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>.
</para>
</callout>
@@ -1244,61 +1246,61 @@
</callout>
<callout arearefs="property4-5">
<para>
- <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).
+ <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).
</para>
</callout>
<callout arearefs="property6">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="property7">
<para>
- <literal>access</literal> (optionnel - par d�faut � <literal>property</literal>): Strat�gie que Hibernate
- doit utiliser pour acc�der � cette valeur.
+ <literal>access</literal> (optionnel - par défaut à <literal>property</literal>): Stratégie que Hibernate
+ doit utiliser pour accéder à cette valeur.
</para>
</callout>
<callout arearefs="property8">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="property9">
<para>
- <literal>unique</literal> (optionnel): G�n�re le DDL d'une contrainte d'unicit� pour les colonnes.
+ <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>.
</para>
</callout>
<callout arearefs="property10">
<para>
- <literal>not-null</literal> (optionnel): G�n�re le DDL d'une contrainte de non nullit� pour les colonnes.
+ <literal>not-null</literal> (optionnel): Génère le DDL d'une contrainte de non nullité pour les colonnes.
</para>
</callout>
<callout arearefs="property11">
<para>
- <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).
+ <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).
</para>
</callout>
<callout arearefs="property12">
<para>
- <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
+ <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</xref>.
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- <emphasis>typename</emphasis> peut �tre:
+ <emphasis>typename</emphasis> peut être:
</para>
<orderedlist spacing="compact">
<listitem>
@@ -1309,43 +1311,43 @@
</listitem>
<listitem>
<para>
- Nom d'une classe Java avec un type basique par d�faut (ex: <literal>int, float,
+ 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>).
</para>
</listitem>
<listitem>
<para>
- Nom d'une classe Java s�rialisable.
+ Nom d'une classe Java sérialisable.
</para>
</listitem>
<listitem>
<para>
- Nom d'une classe ayant un type sp�cifique (ex: <literal>com.illflow.type.MyCustomType</literal>).
+ Nom d'une classe ayant un type spécifique (ex: <literal>com.illflow.type.MyCustomType</literal>).
</para>
</listitem>
</orderedlist>
<para>
- 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,
+ 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).
+ <literal>Hibernate.DATE</literal> et <literal>Hibernate.TIMESTAMP</literal>, ou pour préciser
+ un type spécifique).
</para>
<para>
- 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.
+ 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
+ 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>.
</para>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[
<property name="totalPrice"
@@ -1354,17 +1356,17 @@
AND li.customerId = customerId
AND li.orderNumber = orderNumber )"/>]]></programlisting>
<para>
- 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.
+ 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.
</para>
</sect2>
<sect2 id="mapping-declaration-manytoone" revision="5">
<title>many-to-one</title>
- <para> 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.
+ <para> 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.
</para>
<programlistingco>
<areaspec>
@@ -1414,128 +1416,128 @@
<calloutlist>
<callout arearefs="manytoone1">
<para>
- <literal>name</literal> : Nom de la propri�t�.
+ <literal>name</literal> : Nom de la propriété.
</para>
</callout>
<callout arearefs="manytoone2">
<para>
- <literal>column</literal> (optionnel) : Le nom de la clef �trang�re. Cela peut �tre
- aussi indiqu� avec le sous-�l�ment <literal><column></literal>.
+ <literal>column</literal> (optionnel) : Le nom de la clef étrangère. Cela peut être
+ aussi indiqué avec le sous-élément <literal><column></literal>.
</para>
</callout>
<callout arearefs="manytoone3">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="manytoone4">
<para>
- <literal>cascade</literal> (optionnel) : Indique quelles op�rations doivent
- �tre propag�es de l'objet p�re vers les objets associ�s.
+ <literal>cascade</literal> (optionnel) : Indique quelles opérations doivent
+ être propagées de l'objet père vers les objets associés.
</para>
</callout>
<callout arearefs="manytoone5">
<para>
- <literal>fetch</literal> (optionnel - par d�faut � <literal>select</literal>) :
+ <literal>fetch</literal> (optionnel - par défaut à <literal>select</literal>) :
Choisit entre le chargement de type outer-join ou le chargement par select successifs.
</para>
</callout>
<callout arearefs="manytoone6-7">
<para>
- <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).
+ <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).
</para>
</callout>
<callout arearefs="manytoone8">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="manytoone9">
<para>
- <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�.
+ <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é.
</para>
</callout>
<callout arearefs="manytoone10">
<para>
- <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
+ <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.
</para>
</callout>
<callout arearefs="manytoone11">
<para>
- <literal>not-null</literal> (optionnel) : G�n�re le DDL pour une contrainte de non nullit� pour la clef �trang�re.
+ <literal>not-null</literal> (optionnel) : Génère le DDL pour une contrainte de non nullité pour la clef étrangère.
</para>
</callout>
<callout arearefs="manytoone12">
<para>
- <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).
+ <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).
</para>
</callout>
<callout arearefs="manytoone13">
<para>
- <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
+ <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.
+ de collections, mais utilise l'interception pour le chargement différé.
+ <literal>lazy="false"</literal> indique que l'association sera toujours chargée.
</para>
</callout>
<callout arearefs="manytoone14">
<para>
- <literal>not-found</literal> (optionnel - par d�faut � <literal>exception</literal>) :
- Indique comment les clefs �trang�res qui r�f�rencent des lignes manquantes doivent �tre manipul�es :
+ <literal>not-found</literal> (optionnel - par défaut à <literal>exception</literal>) :
+ Indique comment les clefs étrangères qui référencent des lignes manquantes doivent être manipulées :
<literal>ignore</literal> traitera une ligne manquante comme une association nulle.
</para>
</callout>
<callout arearefs="manytoone15">
<para>
- <literal>entity-name</literal> (optionnel) : Le nom de l'entit� de la classe associ�e.
+ <literal>entity-name</literal> (optionnel) : Le nom de l'entité de la classe associée.
</para>
</callout>
<callout arearefs="manytoone16">
<para>
- <literal>formula</literal> (optionnel) : une expression SQL qui d�finit la valeur
- pour une cl� �trang�re calcul�e.
+ <literal>formula</literal> (optionnel) : une expression SQL qui définit la valeur
+ pour une clé étrangère calculée.
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- 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,
+ 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,
+ 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.
+ pour une explication complète.
Notez que les assocations many-to-one et one-to-one ne supportent pas orphan delete.
</para>
<para>
- Une d�claration <literal>many-to-one</literal> typique est aussi simple que :
+ Une déclaration <literal>many-to-one</literal> typique est aussi simple que :
</para>
<programlisting><![CDATA[<many-to-one name="product" class="Product" column="PRODUCT_ID"/>]]></programlisting>
<para>
- 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
+ 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
+ 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.)
</para>
<programlisting><![CDATA[<property name="serialNumber" unique="true" type="string" column="SERIAL_NUMBER"/>]]></programlisting>
@@ -1544,17 +1546,17 @@
</para>
<programlisting><![CDATA[<many-to-one name="product" property-ref="serialNumber" column="PRODUCT_SERIAL_NUMBER"/>]]></programlisting>
<para>
- bien que ce ne soit certainement pas encourag�.
+ bien que ce ne soit certainement pas encouragé.
</para>
<para>
- 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>.
+ 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>.
</para>
</sect2>
<sect2 id="mapping-declaration-onetoone" revision="3">
<title>one-to-one</title>
<para>
- Une association one-to-one vers une autre classe persistante est d�clar�e avec l'�l�ment
+ Une association one-to-one vers une autre classe persistante est déclarée avec l'élément
<literal>one-to-one</literal>.
</para>
<programlistingco>
@@ -1584,62 +1586,62 @@
<calloutlist>
<callout arearefs="onetoone1">
<para>
- <literal>name</literal> : Le nom de la propri�t�.
+ <literal>name</literal> : Le nom de la propriété.
</para>
</callout>
<callout arearefs="onetoone2">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="onetoone3">
<para>
- <literal>cascade</literal> (optionnel) : Indique quelles op�rations doivent
- �tre cascad�es de l'objet p�re vers l'objet associ�.
+ <literal>cascade</literal> (optionnel) : Indique quelles opérations doivent
+ être cascadées de l'objet père vers l'objet associé.
</para>
</callout>
<callout arearefs="onetoone4">
<para>
- <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.
+ <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).
+ <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).
</para>
</callout>
<callout arearefs="onetoone5">
<para>
- <literal>fetch</literal> (optionnel - par d�faut � <literal>select</literal>) :
- Choisit entre r�cup�ration par jointure externe ou select s�quentiel.
+ <literal>fetch</literal> (optionnel - par défaut à <literal>select</literal>) :
+ Choisit entre récupération par jointure externe ou select séquentiel.
</para>
</callout>
<callout arearefs="onetoone6">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="onetoone7">
<para>
- <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�.
+ <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é.
</para>
</callout>
<callout arearefs="onetoone8">
<para>
<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).
+ 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).
</para>
</callout>
<callout arearefs="onetoone9">
<para>
- <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
+ <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>
</para>
@@ -1662,25 +1664,25 @@
</listitem>
<listitem>
<para>
- association par clef �trang�re unique
+ association par clef étrangère unique
</para>
</listitem>
</itemizedlist>
<para>
- 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 !
+ 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 !
</para>
<para>
- Pour une association par clef primaire, ajoutez les mappings suivants � <literal>Employee</literal> et
+ Pour une association par clef primaire, ajoutez les mappings suivants à <literal>Employee</literal> et
<literal>Person</literal>, respectivement.
</para>
<programlisting><![CDATA[<one-to-one name="person" class="Person"/>]]></programlisting>
<programlisting><![CDATA[<one-to-one name="employee" class="Employee" constrained="true"/>]]></programlisting>
<para>
- 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
+ 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> :
</para>
<programlisting><![CDATA[<class name="person" table="PERSON">
@@ -1695,17 +1697,17 @@
constrained="true"/>
</class>]]></programlisting>
<para>
- 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>
+ 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>.
</para>
<para>
- Alternativement, une clef �trang�re avec contrainte d'unicit� de <literal>Employee</literal> vers
- <literal>Person</literal> peut �tre indiqu�e ainsi :
+ Alternativement, une clef étrangère avec contrainte d'unicité de <literal>Employee</literal> vers
+ <literal>Person</literal> peut être indiquée ainsi :
</para>
<programlisting><![CDATA[<many-to-one name="person" class="Person" column="PERSON_ID" unique="true"/>]]></programlisting>
<para>
- Et cette association peut �tre rendue bidirectionnelle en ajoutant ceci au mapping de <literal>Person</literal> :
+ Et cette association peut être rendue bidirectionnelle en ajoutant ceci au mapping de <literal>Person</literal> :
</para>
<programlisting><![CDATA[<one-to-one name="employee" class="Employee" property-ref="person"/>]]></programlisting>
</sect2>
@@ -1720,28 +1722,28 @@
</natural-id>]]></programlisting>
<para>
- 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.
+ 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.
</para>
<para>
- Nous vous recommandons fortement d'impl�menter <literal>equals()</literal> et
- <literal>hashCode()</literal> pour comparer les cl�s naturelles de l'entit�.
+ Nous vous recommandons fortement d'implémenter <literal>equals()</literal> et
+ <literal>hashCode()</literal> pour comparer les clés naturelles de l'entité.
</para>
<para>
- Ce mapping n'est pas destin� � �tre utilis� avec des entit�s qui ont des cl�s naturelles.
+ Ce mapping n'est pas destiné à être utilisé avec des entités qui ont des clés naturelles.
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- <literal>mutable</literal> (optionel, par d�faut � <literal>false</literal>) :
- Par d�faut, les identifiants naturels sont suppos�s �tre immuable (constants).
+ <literal>mutable</literal> (optionel, par défaut à <literal>false</literal>) :
+ Par défaut, les identifiants naturels sont supposés être immuable (constants).
</para>
</listitem>
</itemizedlist>
@@ -1750,9 +1752,9 @@
<sect2 id="mapping-declaration-component" revision="2">
<title>component, dynamic-component</title>
<para>
- 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.
+ 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.
</para>
<programlistingco>
<areaspec>
@@ -1783,77 +1785,77 @@
<calloutlist>
<callout arearefs="component1">
<para>
- <literal>name</literal> : Nom de la propri�t�
+ <literal>name</literal> : Nom de la propriété
</para>
</callout>
<callout arearefs="component2">
<para>
- <literal>class</literal> (optionnel - par d�faut au type de la propri�t� d�termin� par r�flexion) :
+ <literal>class</literal> (optionnel - par défaut au type de la propriété déterminé par réflexion) :
le nom de la classe (fille) du composant.
</para>
</callout>
<callout arearefs="component3">
<para>
- <literal>insert</literal> : Est ce que les colonnes mapp�es apparaissent dans les
+ <literal>insert</literal> : Est ce que les colonnes mappées apparaissent dans les
<literal>INSERT</literal>s ?
</para>
</callout>
<callout arearefs="component4">
<para>
- <literal>update</literal>: Est ce que les colonnes mapp�es apparaissent dans les
+ <literal>update</literal>: Est ce que les colonnes mappées apparaissent dans les
<literal>UPDATE</literal>s ?
</para>
</callout>
<callout arearefs="component5">
<para>
- <literal>access</literal> (optionnel - par d�faut � <literal>property</literal>) :
- La strat�gie que Hibernate doit utiliser pour acc�der � la valeur de cette propri�t�.
+ <literal>access</literal> (optionnel - par défaut à <literal>property</literal>) :
+ La stratégie que Hibernate doit utiliser pour accéder à la valeur de cette propriété.
</para>
</callout>
<callout arearefs="component6">
<para>
- <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).
+ <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).
</para>
</callout>
<callout arearefs="component7">
<para>
- <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).
+ <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).
</para>
</callout>
<callout arearefs="component8">
<para>
- <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.
+ <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.
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- Les tags fils <literal><property></literal> mappent les propri�t�s
+ Les tags fils <literal><property></literal> mappent les propriétés
de la classe fille sur les colonnes de la table.
</para>
<para>
- L'�l�ment <literal><component></literal> permet de d�clarer sous-�l�ment <literal><parent></literal> qui associe une propri�t�
- de la classe composant comme une r�f�rence arri�re vers l'entit� contenante.
+ L'élément <literal><component></literal> permet de déclarer sous-élément <literal><parent></literal> qui associe une propriété
+ de la classe composant comme une référence arrière vers l'entité contenante.
</para>
<para>
- 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
+ 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"/>.
</para>
</sect2>
<sect2 id="mapping-declaration-properties" revision="2">
<title>properties</title>
<para>
- 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.
+ 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.
</para>
<programlistingco>
<areaspec>
@@ -1879,33 +1881,33 @@
<callout arearefs="properties1">
<para>
<literal>name</literal> : Le nom logique d'un regroupement et
- <emphasis>non</emphasis> le v�ritable nom d'une propri�t�.
+ <emphasis>non</emphasis> le véritable nom d'une propriété.
</para>
</callout>
<callout arearefs="properties2">
<para>
- <literal>insert</literal> : Est-ce que les colonnes mapp�es apparaissent dans les
+ <literal>insert</literal> : Est-ce que les colonnes mappées apparaissent dans les
<literal>INSERT</literal>s ?
</para>
</callout>
<callout arearefs="properties3">
<para>
- <literal>update</literal> : Est-ce que les colonnes mapp�es apparaissent dans les
+ <literal>update</literal> : Est-ce que les colonnes mappées apparaissent dans les
<literal>UPDATE</literal>s ?
</para>
</callout>
<callout arearefs="properties4">
<para>
- <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).
+ <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).
</para>
</callout>
<callout arearefs="properties5">
<para>
- <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.
+ <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.
</para>
</callout>
</calloutlist>
@@ -1924,8 +1926,8 @@
</properties>
</class>]]></programlisting>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[<many-to-one name="person"
class="Person" property-ref="name">
@@ -1934,15 +1936,15 @@
<column name="lastName"/>
</many-to-one>]]></programlisting>
<para>
- 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.
+ 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.
</para>
</sect2>
<sect2 id="mapping-declaration-subclass" revision="4">
<title>subclass</title>
<para>
- 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
+ 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>.
</para>
<programlistingco>
@@ -1974,33 +1976,33 @@
</callout>
<callout arearefs="subclass2">
<para>
- <literal>discriminator-value</literal> (optionnel - par d�faut le nom de la classe) :
- une valeur qui distingue les diff�rentes sous-classes.
+ <literal>discriminator-value</literal> (optionnel - par défaut le nom de la classe) :
+ une valeur qui distingue les différentes sous-classes.
</para>
</callout>
<callout arearefs="subclass3">
<para>
- <literal>proxy</literal> (optionnel) : Indique une classe ou interface � utiliser pour les chargements
- � la demande des proxies (lazy).
+ <literal>proxy</literal> (optionnel) : Indique une classe ou interface à utiliser pour les chargements
+ à la demande des proxies (lazy).
</para>
</callout>
<callout arearefs="subclass4">
<para>
- <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).
+ <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).
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- 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�.
+ 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é.
</para>
<para>
- Pour plus d'infos sur le mapping d'h�ritage, voir <xref linkend="inheritance"/>.
+ Pour plus d'infos sur le mapping d'héritage, voir <xref linkend="inheritance"/>.
</para>
<programlisting><![CDATA[
<hibernate-mapping>
@@ -2009,15 +2011,15 @@
</subclass>
</hibernate-mapping>]]></programlisting>
<para>
- Pour des informations sur les mappings d'h�ritage, voir <xref linkend="inheritance"/>.
+ Pour des informations sur les mappings d'héritage, voir <xref linkend="inheritance"/>.
</para>
</sect2>
<sect2 id="mapping-declaration-joinedsubclass" revision="3">
<title>joined-subclass</title>
<para>
- 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�.
+ 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é.
</para>
<programlistingco>
<areaspec>
@@ -2058,21 +2060,21 @@
</callout>
<callout arearefs="joinedsubclass3">
<para>
- <literal>proxy</literal> (optionnel) : Indique une classe ou interface pour le chargement diff�r� des proxies.
+ <literal>proxy</literal> (optionnel) : Indique une classe ou interface pour le chargement différé des proxies.
</para>
</callout>
<callout arearefs="joinedsubclass4">
<para>
- <literal>lazy</literal> (optionnel, par d�faut � <literal>true</literal>) : Indiquer
- <literal>lazy="false"</literal> d�sactive l'utilisation du chargement � la demande.
+ <literal>lazy</literal> (optionnel, par défaut à <literal>true</literal>) : Indiquer
+ <literal>lazy="false"</literal> désactive l'utilisation du chargement à la demande.
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
@@ -2106,19 +2108,19 @@
</hibernate-mapping>]]></programlisting>
<para>
- Pour des informations sur les mappings d'h�ritage, voir <xref linkend="inheritance"/>.
+ Pour des informations sur les mappings d'héritage, voir <xref linkend="inheritance"/>.
</para>
</sect2>
<sect2 id="mapping-declaration-unionsubclass" revision="2">
<title>union-subclass</title>
<para>
- 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>.
+ 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>.
</para>
<programlistingco>
<areaspec>
@@ -2158,30 +2160,30 @@
</callout>
<callout arearefs="unionsubclass3">
<para>
- <literal>proxy</literal> (optionnel) : Indique une classe ou interface pour le chargement diff�r� des proxies.
+ <literal>proxy</literal> (optionnel) : Indique une classe ou interface pour le chargement différé des proxies.
</para>
</callout>
<callout arearefs="unionsubclass4">
<para>
- <literal>lazy</literal> (optionnel, par d�faut � <literal>true</literal>) : Indiquer
- <literal>lazy="false"</literal> d�sactive l'utilisation du chargement � la demande.
+ <literal>lazy</literal> (optionnel, par défaut à <literal>true</literal>) : Indiquer
+ <literal>lazy="false"</literal> désactive l'utilisation du chargement à la demande.
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- Aucune colonne discriminante ou colonne clef n'est requise pour cette strat�gie de mapping.
+ Aucune colonne discriminante ou colonne clef n'est requise pour cette stratégie de mapping.
</para>
<para>
- Pour des informations sur les mappings d'h�ritage, voir <xref linkend="inheritance"/>.
+ Pour des informations sur les mappings d'héritage, voir <xref linkend="inheritance"/>.
</para>
</sect2>
<sect2 id="mapping-declaration-join" revision="3">
<title>join</title>
<para>
- En utilisant l'�l�ment <literal><join></literal>, il est possible de mapper
- des propri�t�s d'une classe sur plusieurs tables.
+ En utilisant l'élément <literal><join></literal>, il est possible de mapper
+ des propriétés d'une classe sur plusieurs tables.
</para>
<programlistingco>
<areaspec>
@@ -2213,47 +2215,47 @@
</callout>
<callout arearefs="join2">
<para>
- <literal>schema</literal> (optionnel) : court-circuite le nom de sch�ma sp�cifi� par l'�l�ment de base
+ <literal>schema</literal> (optionnel) : court-circuite le nom de schéma spécifié par l'élément de base
<literal><hibernate-mapping></literal>.
</para>
</callout>
<callout arearefs="join3">
<para>
- <literal>catalog</literal> (optionnel) : court-circuite le nom de catalogue sp�cifi� par l'�l�ment de base
+ <literal>catalog</literal> (optionnel) : court-circuite le nom de catalogue spécifié par l'élément de base
<literal><hibernate-mapping></literal>.
</para>
</callout>
<callout arearefs="join4">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="join5">
<para>
- <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.
+ <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.
</para>
</callout>
<callout arearefs="join6">
<para>
- <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.
+ <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.
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- 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) :
+ 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) :
</para>
<programlisting><![CDATA[<class name="Person"
table="PERSON">
@@ -2268,19 +2270,19 @@
</join>
...]]></programlisting>
<para>
- 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.
+ 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.
</para>
</sect2>
<sect2 id="mapping-declaration-key">
<title>key</title>
<para>
- 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.
+ 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.
</para>
<programlistingco>
<areaspec>
@@ -2302,64 +2304,64 @@
<calloutlist>
<callout arearefs="key1">
<para>
- <literal>column</literal> (optionnel) : Le nom de la colonne de la clef �trang�re
- Cela peut aussi �tre sp�cifi� par l'�l�ment(s) int�gr�(s) <literal><column></literal>.
+ <literal>column</literal> (optionnel) : Le nom de la colonne de la clef étrangère
+ Cela peut aussi être spécifié par l'élément(s) intégré(s) <literal><column></literal>.
</para>
</callout>
<callout arearefs="key2">
<para>
- <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
+ <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.
</para>
</callout>
<callout arearefs="key3">
<para>
- <literal>property-ref</literal> (optionnel) : Indique que la clef �trang�re fait
- r�f�rence � des colonnes qui ne sont pas la clef primaire de la table d'origine
- (Pour les donn�es de syst�mes legacy).
+ <literal>property-ref</literal> (optionnel) : Indique que la clef étrangère fait
+ référence à des colonnes qui ne sont pas la clef primaire de la table d'origine
+ (Pour les données de systèmes legacy).
</para>
</callout>
<callout arearefs="key4">
<para>
- <literal>not-null</literal> (optionnel) : Indique que les colonnes des clefs �trang�res ne
- peuvent pas �tre nulles (c'est implicite si la clef �trang�re fait partie de la clef primaire).
+ <literal>not-null</literal> (optionnel) : Indique que les colonnes des clefs étrangères ne
+ peuvent pas être nulles (c'est implicite si la clef étrangère fait partie de la clef primaire).
</para>
</callout>
<callout arearefs="key5">
<para>
- <literal>update</literal> (optionnel) : Indique que la clef �trang�re ne devrait jamais �tre mise � jour
+ <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).
</para>
</callout>
<callout arearefs="key6">
<para>
- <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).
+ <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).
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- Nous recommandons pour les syst�mes o� les suppressions doivent �tre performantes de d�finir toutes
+ Nous recommandons pour les systèmes où les suppressions doivent être performantes de définir toutes
les clefs <literal>on-delete="cascade"</literal>, ainsi Hibernate utilisera une contrainte
- <literal>ON CASCADE DELETE</literal> au niveau base de donn�es, plut�t que de nombreux
- <literal>DELETE</literal> individuels. Attention, cette fonctionnalit� court-circuite la strat�gie
- habituelle de verrou optimiste pour les donn�es versionn�es.
+ <literal>ON CASCADE DELETE</literal> au niveau base de données, plutôt que de nombreux
+ <literal>DELETE</literal> individuels. Attention, cette fonctionnalité court-circuite la stratégie
+ habituelle de verrou optimiste pour les données versionnées.
</para>
<para>
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
+ 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>.
</para>
</sect2>
<sect2 id="mapping-column" revision="4">
- <title>�l�ments column et formula</title>
+ <title>éléments column et formula</title>
<para>
- 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>.
+ 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>.
</para>
<programlisting><![CDATA[<column
name="column_name"
@@ -2374,8 +2376,8 @@
check="SQL expression"/>]]></programlisting>
<programlisting><![CDATA[<formula>SQL expression</formula>]]></programlisting>
<para>
- Les attributs <literal>column</literal> et <literal>formula</literal> peuvent m�me �tre combin�s
- au sein d'une m�me propri�t� ou mapping d'association pour exprimer, par exemple, des conditions
+ Les attributs <literal>column</literal> et <literal>formula</literal> peuvent même être combinés
+ au sein d'une même propriété ou mapping d'association pour exprimer, par exemple, des conditions
de jointure exotiques.
</para>
<programlisting><![CDATA[<many-to-one name="homeAddress" class="Address"
@@ -2387,10 +2389,10 @@
<sect2 id="mapping-declaration-import">
<title>import</title>
<para>
- Supposez que votre application poss�de deux classes persistantes du m�me nom, et vous ne voulez pas pr�ciser
- le nom Java complet (packages inclus) dans les queries Hibernate. Les classes peuvent alors �tre "import�es"
- explicitement plut�t que de compter sur <literal>auto-import="true"</literal>.Vous pouvez m�me importer
- des classes et interfaces qui ne sont pas mapp�es explicitement.
+ Supposez que votre application possède deux classes persistantes du même nom, et vous ne voulez pas préciser
+ le nom Java complet (packages inclus) dans les queries Hibernate. Les classes peuvent alors être "importées"
+ explicitement plutôt que de compter sur <literal>auto-import="true"</literal>.Vous pouvez même importer
+ des classes et interfaces qui ne sont pas mappées explicitement.
</para>
<programlisting><![CDATA[<import class="java.lang.Object" rename="Universe"/>]]></programlisting>
<programlistingco>
@@ -2410,8 +2412,8 @@
</callout>
<callout arearefs="import2">
<para>
- <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.
+ <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.
</para>
</callout>
</calloutlist>
@@ -2420,19 +2422,19 @@
<sect2 id="mapping-types-anymapping" revision="2">
<title>any</title>
<para>
- Il existe encore un type de mapping de propri�t�. L'�l�ment de mapping <literal><any></literal>
- d�finit une association polymorphique vers des classes de tables multiples. Ce type de mapping requiert
- toujours plus d'une colonne. La premi�re colonne contient le type de l'entit� associ�e. Les colonnes
- restantes contiennent l'identifiant. il est impossible de sp�cifier une contrainte de clef �trang�re
- pour ce type d'association, donc ce n'est certainement pas consid�r� comme le moyen habituel de mapper
+ Il existe encore un type de mapping de propriété. L'élément de mapping <literal><any></literal>
+ définit une association polymorphique vers des classes de tables multiples. Ce type de mapping requiert
+ toujours plus d'une colonne. La première colonne contient le type de l'entité associée. Les colonnes
+ restantes contiennent l'identifiant. il est impossible de spécifier une contrainte de clef étrangère
+ pour ce type d'association, donc ce n'est certainement pas considéré comme le moyen habituel de mapper
des associations (polymorphiques). Vous devriez utiliser cela uniquement dans des cas particuliers
- (par exemple des logs d'audit, des donn�es de session utilisateur, etc...).
+ (par exemple des logs d'audit, des données de session utilisateur, etc...).
</para>
<para>
- 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.
+ 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.
</para>
<programlisting><![CDATA[<any name="being" id-type="long" meta-type="string">
<meta-value value="TBL_ANIMAL" class="Animal"/>
@@ -2468,7 +2470,7 @@
<calloutlist>
<callout arearefs="any1">
<para>
- <literal>name</literal> : le nom de la propri�t�.
+ <literal>name</literal> : le nom de la propriété.
</para>
</callout>
<callout arearefs="any2">
@@ -2478,28 +2480,28 @@
</callout>
<callout arearefs="any3">
<para>
- <literal>meta-type</literal> (optionnel - par d�faut � <literal>string</literal>) :
+ <literal>meta-type</literal> (optionnel - par défaut à <literal>string</literal>) :
Tout type permis pour un mapping par discriminateur.
</para>
</callout>
<callout arearefs="any4">
<para>
- <literal>cascade</literal> (optionnel - par d�faut � <literal>none</literal>) :
+ <literal>cascade</literal> (optionnel - par défaut à <literal>none</literal>) :
le style de cascade.
</para>
</callout>
<callout arearefs="any5">
<para>
- <literal>access</literal> (optionnel - par d�faut � <literal>property</literal>) : La strat�gie
- � utiliser par Hibernate pour acc�der � cette propri�t�.
+ <literal>access</literal> (optionnel - par défaut à <literal>property</literal>) : La stratégie
+ à utiliser par Hibernate pour accéder à cette propriété.
</para>
</callout>
<callout arearefs="any6">
<para>
- <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.
+ <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.
</para>
</callout>
</calloutlist>
@@ -2509,42 +2511,42 @@
<sect1 id="mapping-types">
<title>Hibernate Types</title>
<sect2 id="mapping-types-entitiesvalues" revision="1">
- <title>Entit�s et valeurs</title>
+ <title>Entités et valeurs</title>
<para>
- Pour comprendre le comportement des diff�rents objets Java par rapport au service
+ Pour comprendre le comportement des différents objets Java par rapport au service
de persistance, nous avons besoin de les classer en deux groupes :
</para>
<para>
- 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.
+ 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.
</para>
<para>
- L'�tat persistant d'une entit� consiste en des r�f�rences vers d'autres entit�s et
+ 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.
+ 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.
</para>
<para>
- 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.
+ 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.
- <!-- FIXME Baptiste MATHUS : J'ai remis le texte anglais pour que si la version est publi�e
- comme �a, au moins le lecteur puisse essayer lui aussi de comprendre la version anglaise... -->
+ <!-- FIXME Baptiste MATHUS : J'ai remis le texte anglais pour que si la version est publiée
+ comme ça, au moins le lecteur puisse essayer lui aussi de comprendre la version anglaise... -->
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
@@ -2557,26 +2559,26 @@
Nous nous pencherons sur ces deux concepts tout au long de la documentation.
</para>
<para>
- 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
+ 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
+ Vous pouvez écrire vos propres types de mappings et implémenter aussi vos propres stratégies
de conversion, nous le verrons plus tard.
</para>
<para>
- Tous les types propos�s de base par Hibernate � part les collections autorisent la valeur null.
+ Tous les types proposés de base par Hibernate à part les collections autorisent la valeur null.
</para>
</sect2>
<sect2 id="mapping-types-basictypes" revision="3">
<title>Basic value types</title>
<para>
- Les <emphasis>types basiques de mapping</emphasis> propos�s de base peuvent grossi�rement �tre
- rang�s dans les cat�gories suivantes :
+ Les <emphasis>types basiques de mapping</emphasis> proposés de base peuvent grossièrement être
+ rangés dans les catégories suivantes :
<variablelist>
<varlistentry>
<term>
@@ -2586,7 +2588,7 @@
<listitem>
<para>
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,
+ 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>.
</para>
@@ -2611,7 +2613,7 @@
<para>
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).
+ <literal>TIMESTAMP</literal> (ou équivalent).
</para>
</listitem>
</varlistentry>
@@ -2623,7 +2625,7 @@
<para>
Mappings de type pour <literal>java.util.Calendar</literal> vers les types SQL
<literal>TIMESTAMP</literal> et <literal>DATE</literal>
- (ou �quivalent).
+ (ou équivalent).
</para>
</listitem>
</varlistentry>
@@ -2650,8 +2652,8 @@
<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>.
+ mappées sur leurs codes ISO. Les instances de <literal>TimeZone</literal> sont
+ mappées sur leur <literal>ID</literal>.
</para>
</listitem>
</varlistentry>
@@ -2663,7 +2665,7 @@
<para>
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.
+ Un objet <literal>Class</literal> est mappé sur son nom Java complet.
</para>
</listitem>
</varlistentry>
@@ -2673,7 +2675,7 @@
</term>
<listitem>
<para>
- Mappe les tableaux de bytes vers le type binaire SQL appropri�.
+ Mappe les tableaux de bytes vers le type binaire SQL approprié.
</para>
</listitem>
</varlistentry>
@@ -2683,7 +2685,7 @@
</term>
<listitem>
<para>
- Mappe les longues cha�nes de caract�res Java vers les types SQL
+ Mappe les longues chaînes de caractères Java vers les types SQL
<literal>CLOB</literal> ou <literal>TEXT</literal>.
</para>
</listitem>
@@ -2694,9 +2696,9 @@
</term>
<listitem>
<para>
- Mappe les types Java s�rialisables vers le type SQL binaire appropri�. Vous pouvez
+ 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.
+ d'une classe Java sérialisable ou une interface qui ne soit pas par défaut un type de base.
</para>
</listitem>
</varlistentry>
@@ -2708,8 +2710,8 @@
<para>
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).
+ 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).
</para>
</listitem>
</varlistentry>
@@ -2724,40 +2726,40 @@
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�.
+ 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é.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<para>
- Les identifiants uniques des entit�s et collections peuvent �tre de n'importe quel type de base except�
+ 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).
</para>
<para>
- Les types de base des valeurs ont des <literal>Type</literal> constants correspondants d�finis
+ 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>.
+ représenté le type <literal>string</literal>.
</para>
</sect2>
<sect2 id="mapping-types-custom" revision="2">
- <title>Types de valeur d�finis par l'utilisateur</title>
+ <title>Types de valeur définis par l'utilisateur</title>
<para>
- 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
+ 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>java.lang.String</literal> persistée dans les colonnes
<literal>FIRST_NAME</literal>, <literal>INITIAL</literal>, <literal>SURNAME</literal>.
</para>
<para>
- 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
+ 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.
</para>
@@ -2766,19 +2768,19 @@
<column name="second_string"/>
</property>]]></programlisting>
<para>
- Remarquez l'utilisation des tags <literal><column></literal> pour mapper une propri�t� sur des colonnes
+ Remarquez l'utilisation des tags <literal><column></literal> pour mapper une propriété sur des colonnes
multiples.
</para>
<para>
Les interfaces <literal>CompositeUserType</literal>, <literal>EnhancedUserType</literal>,
<literal>UserCollectionType</literal>, et <literal>UserVersionType</literal> permettent des utilisations
- plus sp�cialis�es.
+ plus spécialisées.
</para>
<para>
- 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.
+ 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.
</para>
<programlisting><![CDATA[<property name="priority">
<type name="com.mycompany.usertypes.DefaultValueIntegerType">
@@ -2786,32 +2788,32 @@
</type>
</property>]]></programlisting>
<para>
- 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�.
+ 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é.
</para>
<para>
- 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�.
+ 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é.
</para>
<programlisting><![CDATA[<typedef class="com.mycompany.usertypes.DefaultValueIntegerType" name="default_zero">
<param name="default">0</param>
</typedef>]]></programlisting>
<programlisting><![CDATA[<property name="priority" type="default_zero"/>]]></programlisting>
<para>
- 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�.
+ 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é.
</para>
<para>
- 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.
+ 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.
</para>
</sect2>
</sect1>
@@ -2820,10 +2822,10 @@
<title>Mapper une classe plus d'une fois</title>
<para>
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.
+ 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.
</para>
<programlisting><![CDATA[<class name="Contract" table="Contracts"
@@ -2845,7 +2847,7 @@
</class>]]></programlisting>
<para>
- Remarquez comment les associations sont d�sormais sp�cifi�es en utilisant
+ Remarquez comment les associations sont désormais spécifiées en utilisant
<literal>entity-name</literal> au lieu de <literal>class</literal>.
</para>
@@ -2854,10 +2856,10 @@
<sect1 id="mapping-quotedidentifiers">
<title>SQL quoted identifiers</title>
<para>
- Vous pouvez forcer Hibernate � mettre un identifiant entre quotes dans le SQL g�n�r� en mettant le nom
+ 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).
+ (habituellement des doubles quotes, mais des parenthèses pour SQL server et des backticks pour MySQL).
</para>
<programlisting><![CDATA[<class name="LineItem" table="`Line Item`">
<id name="id" column="`Item Id`"/><generator class="assigned"/></id>
@@ -2868,16 +2870,16 @@
<sect1 id="mapping-alternatives">
<title>alternatives Metadata</title>
<para>
- XML ne convient pas � tout le monde, il y a donc des moyens alternatifs pour d�finir des metatda
+ 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.
</para>
<sect2 id="mapping-xdoclet">
<title>utilisation de XDoclet</title>
<para>
- De nombreux utilisateurs de Hibernate pr�f�rent embarquer les informations de mappings
+ 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
+ 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.
</para>
<programlisting><![CDATA[package eg;
@@ -2992,16 +2994,16 @@
<title>Utilisation des annotations JDK 5.0</title>
<para>
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.
+ 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.
</para>
<para>
- Ceci est un exemple d'une classe POJO annot�e comme un EJB entit� :
+ Ceci est un exemple d'une classe POJO annotée comme un EJB entité :
</para>
<programlisting><![CDATA[@Entity(access = AccessType.FIELD)
public class Customer implements Serializable {
@@ -3026,58 +3028,58 @@
// Getter/setter and business methods
}]]></programlisting>
<para>
- 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.
+ 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.
</para>
</sect2>
</sect1>
<sect1 id="mapping-generated" revision="1">
- <title>Propri�t�s g�n�r�es</title>
+ <title>Propriétés générées</title>
<para>
- 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.
+ 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.
</para>
<para>
- Les propri�t�s marqu�es comme g�n�r�es doivent de plus ne pas �tre ins�rables et modifiables
+ 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>,
<xref linkend="mapping-declaration-timestamp">timestamps</xref>, et
- <xref linkend="mapping-declaration-property">simple properties</xref> peuvent �tre marqu�s comme
- g�n�r�es.
+ <xref linkend="mapping-declaration-property">simple properties</xref> peuvent être marqués comme
+ générées.
</para>
<para>
- <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.
+ <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.
</para>
<para>
- <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</xref> et
- <xref linkend="mapping-declaration-timestamp">timestamp</xref> peuvent �tre
- d�clar�es comme g�n�r�es, cette option n'est pas disponible � cet endroit...
+ <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</xref> et
+ <xref linkend="mapping-declaration-timestamp">timestamp</xref> peuvent être
+ déclarées comme générées, cette option n'est pas disponible à cet endroit...
</para>
<para>
- <literal>always</literal> - indique que la valeur de la propri�t� est g�n�r�e � l'insert
+ <literal>always</literal> - indique que la valeur de la propriété est générée à l'insert
comme aux updates.
</para>
</sect1>
<sect1 id="mapping-database-object">
- <title>Objets auxiliaires de la base de donn�es</title>
+ <title>Objets auxiliaires de la base de données</title>
<para>
- 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...
+ 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...
</para>
<para>
Le premier mode est de lister explicitement les commandes CREATE et DROP dans le fichier
@@ -3091,8 +3093,8 @@
</database-object>
</hibernate-mapping>]]></programlisting>
<para>
- 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
+ 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>.
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -3102,7 +3104,7 @@
</database-object>
</hibernate-mapping>]]></programlisting>
<para>
- Additionnellement, ces objets de base de donn�es peuvent �tre optionnellement trait�s
+ Additionnellement, ces objets de base de données peuvent être optionnellement traités
selon l'utilisation de dialectes particuliers..
</para>
<programlisting><![CDATA[<hibernate-mapping>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/batch.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/batch.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/batch.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,10 +1,12 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="batch">
<title>Traitement par paquet</title>
<para>
- Une approche na�ve pour ins�rer 100 000 lignes dans la base de donn�es en utilisant
- Hibernate pourrait ressembler � �a :
+ Une approche naïve pour insérer 100 000 lignes dans la base de données en utilisant
+ Hibernate pourrait ressembler à ça :
</para>
<programlisting><![CDATA[Session session = sessionFactory.openSession();
@@ -17,14 +19,14 @@
session.close();]]></programlisting>
<para>
- 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
+ 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.
</para>
<para>
- Dans ce chapitre nous montrerons comment �viter ce probl�me. D'abord, cependant,
+ 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
@@ -34,8 +36,8 @@
<programlisting><![CDATA[hibernate.jdbc.batch_size 20]]></programlisting>
<para>
- 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� :
+ 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é :
</para>
<programlisting><![CDATA[hibernate.cache.use_second_level_cache false]]></programlisting>
@@ -44,9 +46,9 @@
<title>Insertions en paquet</title>
<para>
- Lorsque vous rendez des nouveaux objets persistants, vous devez r�guli�rement appeler
+ 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.
+ pour contrôler la taille du cache de premier niveau.
</para>
<programlisting><![CDATA[Session session = sessionFactory.openSession();
@@ -55,8 +57,8 @@
for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.save(customer);
- if ( i % 20 == 0 ) { //20, m�me taille que la taille du paquet JDBC
- //flush un paquet d'insertions et lib�re la m�moire :
+ if ( i % 20 == 0 ) { //20, même taille que la taille du paquet JDBC
+ //flush un paquet d'insertions et libère la mémoire :
session.flush();
session.clear();
}
@@ -68,12 +70,12 @@
</sect1>
<sect1 id="batch-update" >
- <title>Paquet de mises � jour</title>
+ <title>Paquet de mises à jour</title>
<para>
- Pour r�cup�rer et mettre � jour des donn�es les m�mes id�es s'appliquent. En plus,
+ 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.
+ curseurs côté serveur pour les requêtes qui retournent beaucoup de lignes de données.
</para>
<programlisting><![CDATA[Session session = sessionFactory.openSession();
@@ -87,7 +89,7 @@
Customer customer = (Customer) customers.get(0);
customer.updateStuff(...);
if ( ++count % 20 == 0 ) {
- //flush un paquet de mises � jour et lib�re la m�moire :
+ //flush un paquet de mises à jour et libère la mémoire :
session.flush();
session.clear();
}
@@ -101,20 +103,20 @@
<sect1 id="batch-statelesssession">
<title>L'interface StatelessSession</title>
<para>
- 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
+ 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�rables 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
+ 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érables 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.
</para>
@@ -134,39 +136,39 @@
<para>
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.
+ retournées par la requête sont immédiatement détachées. Elles ne sont jamais
+ associées à un contexte de persistance.
</para>
<para>
- 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>.
+ 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>.
</para>
</sect1>
<sect1 id="batch-direct" revision="2">
- <title>Op�rations de style DML</title>
+ <title>Opérations de style DML</title>
<para>
- 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</xref>).
+ 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</xref>).
</para>
<para>
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 :
+ Certains points sont à noter :
</para>
<itemizedlist spacing="compact">
@@ -177,18 +179,18 @@
</listitem>
<listitem>
<para>
- 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.
+ 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.
</para>
</listitem>
<listitem>
<para>
- 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.
+ 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.
</para>
</listitem>
<listitem>
@@ -199,8 +201,8 @@
</itemizedlist>
<para>
- 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
+ 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) :
</para>
@@ -218,7 +220,7 @@
session.close();]]></programlisting>
<para>
- Pour ex�cuter un <literal>DELETE</literal> HQL, utilisez la m�me m�thode
+ Pour exécuter un <literal>DELETE</literal> HQL, utilisez la même méthode
<literal>Query.executeUpdate()</literal> :
</para>
@@ -234,85 +236,85 @@
session.close();]]></programlisting>
<para>
- 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
+ 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.
+ dans la hiérarchie d'héritage.
</para>
<para>
La pseudo-syntaxe pour l'expression <literal>INSERT</literal> est :
<literal>INSERT INTO EntityName properties_list select_statement</literal>. Quelques
- points sont � noter :
+ points sont à noter :
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- Seule la forme INSERT INTO ... SELECT ... est support�e ; pas la forme INSERT INTO ... VALUES ... .
+ Seule la forme INSERT INTO ... SELECT ... est supportée ; pas la forme INSERT INTO ... VALUES ... .
</para>
<para>
- La properties_list est analogue � la <literal>sp�cification de la colonne</literal>
+ 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
+ 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.
</para>
</listitem>
<listitem>
<para>
- select_statement peut �tre n'importe quelle requ�te de s�lection HQl valide, avec
+ 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.
+ 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.
</para>
</listitem>
<listitem>
<para>
- 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
+ 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 utilis�e parce qu'il ne propose pas un moyen de d'exposer ses valeurs
+ qu ne peut pas être utilisée parce qu'il ne propose pas un moyen de d'exposer ses valeurs
par un select.
</para>
</listitem>
<listitem>
<para>
- 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
+ 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).
+ (NdT : seed value) définie par le <literal>org.hibernate.type.VersionType</literal> est utilisée).
</para>
</listitem>
</itemizedlist>
<para>
- Un exemple d'ex�cution d'une expression <literal>INSERT</literal> HQL :
+ Un exemple d'exécution d'une expression <literal>INSERT</literal> HQL :
</para>
<programlisting><![CDATA[Session session = sessionFactory.openSession();
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/best_practices.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/best_practices.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/best_practices.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,25 +1,27 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="best-practices" revision="3">
<title>Meilleures pratiques</title>
<variablelist spacing="compact">
<varlistentry>
- <term>D�coupez finement vos classes et mappez les en utilisant <literal><component></literal>.</term>
+ <term>Découpez finement vos classes et mappez les en utilisant <literal><component></literal>.</term>
<listitem>
<para>
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.
+ Ceci permet la réutilisation du code et simplifie la maintenance.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>D�clarez des propri�t�s d'identifiants dans les classes persistantes.</term>
+ <term>Déclarez des propriétés d'identifiants dans les classes persistantes.</term>
<listitem>
<para>
- Hibernate rend les propri�t�s d'identifiants optionnelles. Il existe beaucoup de raisons
+ 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).
+ techniques (générés, et sans connotation métier).
</para>
</listitem>
</varlistentry>
@@ -27,9 +29,9 @@
<term>Identifiez les clefs naturelles.</term>
<listitem>
<para>
- 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.
+ 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.
</para>
</listitem>
</varlistentry>
@@ -39,7 +41,7 @@
<para>
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.
+ d'un travail en équipe.
</para>
</listitem>
</varlistentry>
@@ -47,63 +49,63 @@
<term>Chargez les mappings comme des ressources.</term>
<listitem>
<para>
- D�ployez les mappings en m�me temps que les classes qu'ils mappent.
+ Déployez les mappings en même temps que les classes qu'ils mappent.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>Pensez � externaliser les cha�nes de caract�res.</term>
+ <term>Pensez à externaliser les chaînes de caractères.</term>
<listitem>
<para>
- Ceci est une bonne habitude si vos requ�tes appellent des fonctions SQL qui ne sont
+ 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.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>Utilisez les variables "bind�es".</term>
+ <term>Utilisez les variables "bindées".</term>
<listitem>
<para>
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.
+ 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.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>Ne g�rez pas vous m�me les connexions JDBC.</term>
+ <term>Ne gérez pas vous même les connexions JDBC.</term>
<listitem>
<para>
- 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>.
+ 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>.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>Pensez � utiliser les types utilisateurs.</term>
+ <term>Pensez à utiliser les types utilisateurs.</term>
<listitem>
<para>
- 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.
+ 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.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>Utilisez du JDBC pur dans les goulets d'�tranglement.</term>
+ <term>Utilisez du JDBC pur dans les goulets d'étranglement.</term>
<listitem>
<para>
- Dans certaines parties critiques de votre syst�me d'un point de vue performance, quelques op�rations
+ 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
+ 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.
+ 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.
</para>
</listitem>
</varlistentry>
@@ -111,101 +113,101 @@
<term>Comprendre le flush de <literal>Session</literal>.</term>
<listitem>
<para>
- 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.
+ 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.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>Dans une architecture � trois couches, pensez � utiliser <literal>saveOrUpdate()</literal>.</term>
+ <term>Dans une architecture à trois couches, pensez à utiliser <literal>saveOrUpdate()</literal>.</term>
<listitem>
<para>
- 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.
+ 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.
+ synchroniser les objets avec la base de données.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>Dans une architecture � deux couches, pensez � utiliser la d�connexion de session.</term>
+ <term>Dans une architecture à deux couches, pensez à utiliser la déconnexion de session.</term>
<listitem>
<para>
- 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
+ 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
+ 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.
+ données périmées.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>Consid�rez que les exceptions ne sont pas rattrapables.</term>
+ <term>Considérez que les exceptions ne sont pas rattrapables.</term>
<listitem>
<para>
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.
+ 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.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>Pr�f�rez le chargement tardif des associations.</term>
+ <term>Préférez le chargement tardif des associations.</term>
<listitem>
<para>
- Utilisez le chargement complet avec mod�ration.
- Utilisez les proxies et les collections charg�es tardivement
+ 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
+ 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>.
+ 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>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
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.
+ ou une <emphasis>phase d'assemblage</emphasis> disciplinée pour éviter des problèmes
+ avec des données non rapatriées.
</term>
<listitem>
<para>
- 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.
+ 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.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>Pensez � abstraite votre logique m�tier d'Hibernate.</term>
+ <term>Pensez à abstraite votre logique métier d'Hibernate.</term>
<listitem>
<para>
- 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
+ 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).
</para>
@@ -217,20 +219,20 @@
<para>
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.
+ 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.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>Pr�f�rez les associations bidirectionnelles.</term>
+ <term>Préférez les associations bidirectionnelles.</term>
<listitem>
<para>
- 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.
+ 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.
</para>
</listitem>
</varlistentry>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/collection_mapping.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/collection_mapping.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/collection_mapping.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,4 +1,6 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="collections">
<title>Mapping des collections</title>
@@ -6,7 +8,7 @@
<title>Collections persistantes</title>
<para>
- Hibernate requiert que les champs contenant des collections persistantes soient d�clar�s
+ Hibernate requiert que les champs contenant des collections persistantes soient déclarés
comme des types d'interface, par exemple :
</para>
@@ -21,21 +23,21 @@
}]]></programlisting>
<para>
- L'interface r�elle devrait �tre <literal>java.util.Set</literal>,
+ 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>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>.)
</para>
<para>
- Notez comment nous avons initialis� les variables d'instance avec une instance de
+ 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
+ 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>.
+ 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 :
</para>
@@ -50,7 +52,7 @@
(HashSet) cat.getKittens(); // Erreur !]]></programlisting>
<para>
- Les collections persistantes inject�es par Hibernate se comportent de la m�me mani�re que
+ 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.
@@ -58,19 +60,19 @@
<para>
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.
+ 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.
</para>
<para>
- 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).
+ 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).
</para>
</sect1>
@@ -79,9 +81,9 @@
<title>Mapper une collection</title>
<para>
- 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>.
+ 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>.
</para>
<programlisting><![CDATA[<class name="Product">
@@ -93,11 +95,11 @@
</class>]]></programlisting>
<para>
- � part <literal><set></literal>, il y aussi les �l�ments de mapping
+ À 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 :
+ L'élément <literal><map></literal> est représentatif :
</para>
<programlistingco>
@@ -143,97 +145,97 @@
<calloutlist>
<callout arearefs="mappingcollection1">
<para>
- <literal>name</literal> : le nom de la propri�t� contenant la collection
+ <literal>name</literal> : le nom de la propriété contenant la collection
</para>
</callout>
<callout arearefs="mappingcollection2">
<para>
- <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)
+ <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)
</para>
</callout>
<callout arearefs="mappingcollection3">
<para>
- <literal>schema</literal> (optionnel) : le nom du sch�ma pour surcharger le
- sch�ma d�clar� dans l'�l�ment racine
+ <literal>schema</literal> (optionnel) : le nom du schéma pour surcharger le
+ schéma déclaré dans l'élément racine
</para>
</callout>
<callout arearefs="mappingcollection4">
<para>
- <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
+ <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)
</para>
</callout>
<callout arearefs="mappingcollection5">
<para>
- <literal>inverse</literal> (optionnel - par d�faut = <literal>false</literal>) :
- d�finit cette collection comme l'extr�mit� "inverse" de l'association
+ <literal>inverse</literal> (optionnel - par défaut = <literal>false</literal>) :
+ définit cette collection comme l'extrêmité "inverse" de l'association
bidirectionnelle
</para>
</callout>
<callout arearefs="mappingcollection6">
<para>
- <literal>cascade</literal> (optionnel - par d�faut = <literal>none</literal>) :
- active les op�rations de cascade vers les entit�s filles
+ <literal>cascade</literal> (optionnel - par défaut = <literal>none</literal>) :
+ active les opérations de cascade vers les entités filles
</para>
</callout>
<callout arearefs="mappingcollection7">
<para>
- <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)
+ <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)
</para>
</callout>
<callout arearefs="mappingcollection8">
<para>
- <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>
+ <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>
</para>
</callout>
<callout arearefs="mappingcollection9">
<para>
- <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)
+ <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)
</para>
</callout>
<callout arearefs="mappingcollection10">
<para>
- <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
+ <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
</para>
</callout>
<callout arearefs="mappingcollection11">
<para>
- <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
+ <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
</para>
</callout>
<callout arearefs="mappingcollection12">
<para>
- <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�
+ <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é
</para>
</callout>
<callout arearefs="mappingcollection13">
<para>
- <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)
+ <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)
</para>
</callout>
<callout arearefs="mappingcollection14">
<para>
- <literal>mutable</literal> (optionnel - par d�faut = <literal>true</literal>) :
- une valeur � <literal>false</literal> sp�cifie que les �l�ments de la
+ <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)
</para>
</callout>
@@ -241,74 +243,74 @@
</programlistingco>
<sect2 id="collections-foreignkeys" >
- <title>Les clefs �trang�res d'une collection</title>
+ <title>Les clefs étrangères d'une collection</title>
<para>
- 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)
+ 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>.
+ La colonne de la clef de la collection est mappée par l'élément <literal><key></literal>.
</para>
<para>
- 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
+ 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>.
</para>
<programlisting><![CDATA[<key column="productSerialNumber" not-null="true"/>]]></programlisting>
<para>
- La contraite de la clef �trang�re peut utiliser <literal>ON DELETE CASCADE</literal>.
+ La contraite de la clef étrangère peut utiliser <literal>ON DELETE CASCADE</literal>.
</para>
<programlisting><![CDATA[<key column="productSerialNumber" on-delete="cascade"/>]]></programlisting>
<para>
- Voir le chapitre pr�c�dent pour une d�finition compl�te de l'�l�ment <literal><key></literal>.
+ Voir le chapitre précédent pour une définition complète de l'élément <literal><key></literal>.
</para>
</sect2>
<sect2 id="collections-elements" >
- <title>Les �l�ments d'une collection</title>
+ <title>Les éléments d'une collection</title>
<para>
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.
+ 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.
</para>
<para>
- 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
+ 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�.
+ 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é.
</para>
</sect2>
<sect2 id="collections-indexed">
- <title>Collections index�es</title>
+ <title>Collections indexées</title>
<para>
- Tous les mappings de collection, except�s ceux avec les s�mantiques d'ensemble (NdT : set) et
+ 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>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).
+ 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).
</para>
<programlistingco>
@@ -327,8 +329,8 @@
</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
+ <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>
@@ -356,7 +358,7 @@
<callout arearefs="mapkey2">
<para>
<literal>formula</literal> (optionnel) :
- une formule SQL utilis�e pour �valuer la clef de la map
+ une formule SQL utilisée pour évaluer la clef de la map
</para>
</callout>
<callout arearefs="mapkey3">
@@ -382,35 +384,35 @@
<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
+ 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
+ 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
+ <literal>class</literal> (requis): la classe de l'entité utilisée comme clef de la map
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- 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
+ 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�.
+ il est récupéré de la base de données, mais il peut être optionnellement trié ou ordonné.
</para>
</sect2>
<para>
- 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.
+ 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.
</para>
<sect2 id="collections-ofvalues" revision="2">
@@ -418,8 +420,8 @@
<para>
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
+ <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.
</para>
@@ -447,25 +449,25 @@
<calloutlist>
<callout arearefs="element1b">
<para>
- <literal>column</literal> (optionnel) : le nom de la colonne contenant les valeurs de l'�l�ment de la collection
+ <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
+ <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
+ <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>.
+ Une <emphasis>association plusieurs-vers-plusieurs</emphasis> est spécifiée en
+ utilisant l'élément <literal><many-to-many></literal>.
</para>
<programlistingco>
@@ -494,63 +496,63 @@
<calloutlist>
<callout arearefs="manytomany1">
<para>
- <literal>column</literal> (optionnel) : le nom de la colonne de la clef �trang�re de l'�l�ment
+ <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
+ 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
+ <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>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�
+ <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
+ <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>
+ <literal>entity-name</literal> (optionnel) : le nom de l'entité de la classe associée, comme une alternative à <literal>class</literal>
</para>
</callout>
<callout arearefs="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.
+ <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>
<para>
- Quelques exemples, d'abord, un ensemble de cha�nes de caract�res :
+ Quelques exemples, d'abord, un ensemble de chaînes de caractères :
</para>
<programlisting><![CDATA[<set name="names" table="person_names">
@@ -559,7 +561,7 @@
</set>]]></programlisting>
<para>
- Un bag contenant des entiers (avec un ordre d'it�ration d�termin� par l'attribut <literal>order-by</literal>) :
+ Un bag contenant des entiers (avec un ordre d'itération déterminé par l'attribut <literal>order-by</literal>) :
</para>
<programlisting><![CDATA[<bag name="sizes"
@@ -570,7 +572,7 @@
</bag>]]></programlisting>
<para>
- Un tableau d'entit�s - dans ce cas, une association plusieurs-vers-plusieurs :
+ Un tableau d'entités - dans ce cas, une association plusieurs-vers-plusieurs :
</para>
<programlisting><![CDATA[<array name="addresses"
@@ -582,7 +584,7 @@
</array>]]></programlisting>
<para>
- Une map de cha�nes de caract�res vers des dates :
+ Une map de chaînes de caractères vers des dates :
</para>
<programlisting><![CDATA[<map name="holidays"
@@ -616,26 +618,26 @@
<para>
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 :
+ par une clef étrangère, sans l'intervention d'une table de collection. Ce mapping perd certaines sémantiques des collections Java normales :
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- Une instance de la classe de l'entit� contenue ne peut pas appartenir � plus d'une
+ Une instance de la classe de l'entité contenue ne peut pas appartenir à plus d'une
instance de la collection
</para>
</listitem>
<listitem>
<para>
- Une instance de la classe de l'entit� contenue ne peut pas appara�tre plus plus d'une valeur d'index de la collection
+ Une instance de la classe de l'entité contenue ne peut pas apparaître plus plus d'une valeur d'index de la collection
</para>
</listitem>
</itemizedlist>
<para>
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
+ 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.
</para>
@@ -655,41 +657,41 @@
<calloutlist>
<callout arearefs="onetomany1">
<para>
- <literal>class</literal> (requis) : le nom de la classe associ�e
+ <literal>class</literal> (requis) : le nom de la classe associée
</para>
</callout>
<callout arearefs="onetomany2">
<para>
- <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>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
</para>
</callout>
<callout arearefs="onetomany3">
<para>
- <literal>entity-name</literal> (optionnel) : le nom de l'entit� de la
- classe associ�e, comme une alternative � <literal>class</literal>.
+ <literal>entity-name</literal> (optionnel) : le nom de l'entité de la
+ classe associée, comme une alternative à <literal>class</literal>.
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- 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.
+ 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.
</para>
<para>
- <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
+ <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.
+ collection marqué <literal>inverse="true"</literal>. Voir la discussion sur les associations bidirectionnelles plus tard dans ce chapitre.
</para>
<para>
- 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.
+ 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.
</para>
<programlisting><![CDATA[<map name="parts"
@@ -703,14 +705,14 @@
</sect1>
<sect1 id="collections-advancedmappings">
- <title>Mappings de collection avanc�s</title>
+ <title>Mappings de collection avancés</title>
<sect2 id="collections-sorted" revision="2">
- <title>Collections tri�es</title>
+ <title>Collections triées</title>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[<set name="aliases"
@@ -728,21 +730,21 @@
<para>
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>natural</literal> et le nom d'une classe implémentant
<literal>java.util.Comparator</literal>.
</para>
<para>
- Les collections tri�es se comportent r�ellement comme <literal>java.util.TreeSet</literal> ou
+ Les collections triées se comportent réellement comme <literal>java.util.TreeSet</literal> ou
<literal>java.util.TreeMap</literal>.
</para>
<para>
- Si vous voulez que la base de donn�es elle-m�me ordonne les �l�ments de la collection, utilisez l'attribut
+ 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.
+ 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.
</para>
<programlisting><![CDATA[<set name="aliases" table="person_aliases" order-by="lower(name) asc">
@@ -761,7 +763,7 @@
</para>
<para>
- Les associations peuvent m�me �tre tri�es sur des crit�res arbitraires � l'ex�cution en utilisant un <literal>filter()</literal> de collection.
+ Les associations peuvent même être triées sur des critères arbitraires à l'exécution en utilisant un <literal>filter()</literal> de collection.
</para>
<programlisting><![CDATA[sortedUsers = s.createFilter( group.getUsers(), "order by this.name" ).list();]]></programlisting>
@@ -772,14 +774,14 @@
<title>Associations bidirectionnelles</title>
<para>
- Une <emphasis>association bidirectionnelle</emphasis> permet une navigation �
- partir de la "fin" de l'association. Deux sortes d'associations bidirectionnelles sont support�es :
+ Une <emphasis>association bidirectionnelle</emphasis> permet une navigation à
+ partir de la "fin" de l'association. Deux sortes d'associations bidirectionnelles sont supportées :
<variablelist>
<varlistentry>
<term>un-vers-plusieurs (NdT : one-to-many)</term>
<listitem>
<para>
- ensemble ou sac � une extr�mit�, une seule valeur � l'autre
+ ensemble ou sac à une extrémité, une seule valeur à l'autre
</para>
</listitem>
</varlistentry>
@@ -787,7 +789,7 @@
<term>plusieurs-vers-plusieurs (NdT : many-to-many)</term>
<listitem>
<para>
- ensemble ou sac aux deux extr�mit�s
+ ensemble ou sac aux deux extrémités
</para>
</listitem>
</varlistentry>
@@ -795,13 +797,13 @@
</para>
<para>
- 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).
+ 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).
</para>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[<class name="Category">
@@ -825,28 +827,28 @@
</class>]]></programlisting>
<para>
- 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
+ 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 :
+ plus facile à comprendre si vous pensez au modèle objet de Java et comment nous
+ créons une relation plusieurs-vers-plusieurs en Java :
</para>
<programlisting><![CDATA[
-category.getItems().add(item); // La cat�gorie est maintenant "au courant" de la relation
+category.getItems().add(item); // La catégorie est maintenant "au courant" de la relation
item.getCategories().add(category); // L'objet est maintenant "au courant" de la relation
-session.persist(item); // La relation ne sera pas sauvegard�e !
-session.persist(category); // La relation sera sauvegard�e]]></programlisting>
+session.persist(item); // La relation ne sera pas sauvegardée !
+session.persist(category); // La relation sera sauvegardée]]></programlisting>
<para>
- La partie non-inverse est utilis�e pour sauvegarder la repr�sentation en m�moire dans la base de donn�es.
+ La partie non-inverse est utilisée pour sauvegarder la représentation en mémoire dans la base de données.
</para>
<para>
- 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>.
+ 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>.
</para>
<programlisting><![CDATA[<class name="Parent">
@@ -868,19 +870,19 @@
</class>]]></programlisting>
<para>
- 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 !
+ 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 !
</para>
</sect2>
<sect2 id="collections-indexedbidirectional">
- <title>Associations bidirectionnelles avec des collections index�es</title>
+ <title>Associations bidirectionnelles avec des collections indexées</title>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[<class name="Parent">
@@ -906,10 +908,10 @@
</class>]]></programlisting>
<para>
- 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
+ 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 :
</para>
@@ -937,8 +939,8 @@
</class>]]></programlisting>
<para>
- 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
+ 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 ?
</para>
@@ -965,12 +967,12 @@
</map>]]></programlisting>
<para>
- Une seconde approche est simplement de remodeler l'association comme une classe d'entit�. C'est
+ Une seconde approche est simplement de remodeler l'association comme une classe d'entité. C'est
l'approche la plus commune.
</para>
<para>
- Une alternative finale est d'utiliser des �l�ments composites, dont nous discuterons plus tard.
+ Une alternative finale est d'utiliser des éléments composites, dont nous discuterons plus tard.
</para>
</sect2>
@@ -979,21 +981,21 @@
<title>Utiliser un <literal><idbag></literal></title>
<para>
- 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
+ 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.
+ table avec une clef subrogée.
</para>
<para>
- L'�l�ment <literal><idbag></literal> vous laisse mapper une <literal>List</literal>
- (ou une <literal>Collection</literal>) avec une s�mantique de sac.
+ L'élément <literal><idbag></literal> vous laisse mapper une <literal>List</literal>
+ (ou une <literal>Collection</literal>) avec une sémantique de sac.
</para>
<programlisting><![CDATA[<idbag name="lovers" table="LOVERS">
@@ -1005,22 +1007,22 @@
</idbag>]]></programlisting>
<para>
- 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.
+ 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.
</para>
<para>
- Notez que les performances de la mise � jour d'un <literal><idbag></literal>
+ 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
+ Hibernate peut localiser des lignes individuelles efficacement et les mettre à jour ou
les effacer individuellement, comme une liste, une map ou un ensemble.
</para>
<para>
- 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>.
+ 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>.
</para>
</sect2>
@@ -1045,7 +1047,7 @@
<title>Exemples de collections</title>
<para>
- Les sections pr�c�dentes sont assez confuses. Donc prenons un exemple. Cette classe :
+ Les sections précédentes sont assez confuses. Donc prenons un exemple. Cette classe :
</para>
<programlisting><![CDATA[package eg;
@@ -1093,7 +1095,7 @@
</hibernate-mapping>]]></programlisting>
<para>
- Ceci mappe les d�finitions de tables suivantes :
+ Ceci mappe les définitions de tables suivantes :
</para>
<programlisting><![CDATA[create table parent ( id bigint not null primary key )
@@ -1139,7 +1141,7 @@
<para>
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> :
+ vous pouvez déclarer la contrainte <literal>NOT NULL</literal> sur le mapping <literal><key></literal> :
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -1164,8 +1166,8 @@
</hibernate-mapping>]]></programlisting>
<para>
- D'un autre c�t�, si un enfant pouvait avoir plusieurs parent, une association
- plusieurs-vers-plusieurs est plus appropri�e :
+ D'un autre côté, si un enfant pouvait avoir plusieurs parent, une association
+ plusieurs-vers-plusieurs est plus appropriée :
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -1190,7 +1192,7 @@
</hibernate-mapping>]]></programlisting>
<para>
- D�finitions des tables :
+ Définitions des tables :
</para>
<programlisting><![CDATA[create table parent ( id bigint not null primary key )
@@ -1202,12 +1204,12 @@
alter table childset add constraint childsetfk1 (child_id) references child]]></programlisting>
<para>
- Pour plus d'exemples et une revue compl�te du mapping de la relation parent/enfant, voir
+ Pour plus d'exemples et une revue complète du mapping de la relation parent/enfant, voir
see <xref linkend="example-parentchild"/>.
</para>
<para>
- Des mappings d'association plus exotiques sont possibles, nous cataloguerons toutes les possibilit�s
+ Des mappings d'association plus exotiques sont possibles, nous cataloguerons toutes les possibilités
dans le prochain chapitre.
</para>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/component_mapping.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/component_mapping.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/component_mapping.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,21 +1,23 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="components">
<title>Mapping de composants</title>
<para>
- La notion de <emphasis>composants</emphasis> est r�utilis� dans diff�rents contextes,
- avec diff�rents objectifs, � travers Hibernate.
+ La notion de <emphasis>composants</emphasis> est réutilisé dans différents contextes,
+ avec différents objectifs, à travers Hibernate.
</para>
<sect1 id="components-dependentobjects" revision="2" >
- <title>Objects d�pendants</title>
+ <title>Objects dépendants</title>
<para>
- 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
+ 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:
+ Par exemple on pourrait modélisé l'objet personne de cette façon:
</para>
<programlisting><![CDATA[public class Person {
@@ -69,14 +71,14 @@
}]]></programlisting>
<para>
- 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.
+ 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.
</para>
<para>
- Nous serions alors amen� � mapper ce composant de cette fa�on:
+ Nous serions alors amené à mapper ce composant de cette façon:
</para>
<programlisting><![CDATA[<class name="eg.Person" table="person">
@@ -100,24 +102,24 @@
</para>
<para>
- 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
+ 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.
+ 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.
</para>
<para>
- Les propri�t�s d'un composant peuvent �tre de tous les types qu'Hibernate supporte habituellement
+ 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.
+ être vus comme quelque chose d'exotique. Hibernate a été conçu pour supporter un modèle objet très granulaire.
</para>
<para>
- Le <literal><component></literal> peut inclure dans la liste de ses propri�t�s
- une r�f�rence au <literal><parent></literal> conteneur.
+ Le <literal><component></literal> peut inclure dans la liste de ses propriétés
+ une référence au <literal><parent></literal> conteneur.
</para>
<programlisting><![CDATA[<class name="eg.Person" table="person">
@@ -126,7 +128,7 @@
</id>
<property name="birthday" type="date"/>
<component name="Name" class="eg.Name" unique="true">
- <parent name="namedPerson"/> <!-- r�f�rence arri�re � Person -->
+ <parent name="namedPerson"/> <!-- référence arrière à Person -->
<property name="initial"/>
<property name="first"/>
<property name="last"/>
@@ -136,11 +138,11 @@
</sect1>
<sect1 id="components-incollections" revision="1">
- <title>Collection d'objets d�pendants</title>
+ <title>Collection d'objets dépendants</title>
<para>
- 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>
+ 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>.
</para>
@@ -154,39 +156,39 @@
</set>]]></programlisting>
<para>
- 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
+ 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.
</para>
<para>
- 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)
+ 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)
</para>
<para>
- Remarque, le mapping d'�l�ments composites ne supporte pas la nullit� des
- propri�t�s lorsqu'on utilise un <literal><set></literal>. Hibernate
+ 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 :
+ (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>.
</para>
<para>
- Un cas particulier d'�l�ment composite est un �l�ment composite qui inclut un �l�ment
+ 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> �
+ 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.
+ <literal>quantity</literal> sont des propriétés de l'association.
</para>
<programlisting><![CDATA[<class name="eg.Order" .... >
@@ -203,12 +205,12 @@
</class>]]></programlisting>
<para>
- 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.
+ 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.
</para>
- <para>M�me les associations ternaires ou quaternaires sont possibles:</para>
+ <para>Même les associations ternaires ou quaternaires sont possibles:</para>
<programlisting><![CDATA[<class name="eg.Order" .... >
....
@@ -222,8 +224,8 @@
</class>]]></programlisting>
<para>
- Les �l�ments composites peuvent appara�tre dans les requ�tes en utilisant
- la m�me syntaxe que associations
+ Les éléments composites peuvent apparaître dans les requêtes en utilisant
+ la même syntaxe que associations
</para>
</sect1>
@@ -232,9 +234,9 @@
<title>Utiliser les composants comme index de map</title>
<para>
- l'�l�ment <literal><composite-map-key></literal>
+ 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>Map</literal>. Assurez-vous d'avoir surdéfini
<literal>hashCode()</literal> et <literal>equals()</literal> dans la
classe du composant.
</para>
@@ -244,42 +246,42 @@
<title>Utiliser un composant comme identifiant</title>
<para>
- Vous pouvez utiliser un composant comme identifiant d'une entit�.
- Mais pour cela la classe du composant doit respecter certaines r�gles.
+ Vous pouvez utiliser un composant comme identifiant d'une entité.
+ Mais pour cela la classe du composant doit respecter certaines règles.
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- Elle doit impl�menter <literal>java.io.Serializable</literal>.
+ Elle doit implémenter <literal>java.io.Serializable</literal>.
</para>
</listitem>
<listitem>
<para>
- 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.
+ 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.
</para>
</listitem>
</itemizedlist>
<para>
<emphasis>
- Remarque: avec hibernate3, la seconde r�gle n'est plus absolument
- necessaire mais fa�tes le quand m�me.</emphasis>
+ Remarque: avec hibernate3, la seconde règle n'est plus absolument
+ necessaire mais faîtes le quand même.</emphasis>
</para>
<para>
- 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.
+ 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.
</para>
<para>
- Utiliser l'�l�ment <literal><composite-id></literal> (en incluant l'�l�ment
- <literal><key-property></literal>) � la place de l'habituel d�claration
+ 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
+ <literal>OrderLine</literal> qui dépend de la clé primaire
(composite) de <literal>Order</literal>.
</para>
@@ -303,9 +305,9 @@
</class>]]></programlisting>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[<many-to-one name="orderLine" class="OrderLine">
@@ -316,13 +318,13 @@
</many-to-one>]]></programlisting>
<para>
- (Remarque: l'�l�ment <literal><column></literal> est une alternative � l'attribut
+ (Remarque: l'élément <literal><column></literal> est une alternative à l'attribut
<literal>column</literal> que l'on utilise partout.)
</para>
<para>
- Une association <literal>plusieurs-�-plusieurs</literal> (many-to-many) � <literal>OrderLine</literal>
- utilisera aussi une cl� �trang�re composite:
+ Une association <literal>plusieurs-à-plusieurs</literal> (many-to-many) à <literal>OrderLine</literal>
+ utilisera aussi une clé étrangère composite:
</para>
<programlisting><![CDATA[<set name="undeliveredOrderLines">
@@ -348,12 +350,12 @@
</set>]]></programlisting>
<para>
- (L'�l�ment <literal><one-to-many></literal>, comme d'habitude, ne d�clare pas de colonne.)
+ (L'élément <literal><one-to-many></literal>, comme d'habitude, ne déclare pas de colonne.)
</para>
<para>
- Si <literal>OrderLine</literal> lui-m�me poss�de une collection, celle-ci aura aussi
- une cl� composite �trang�re.
+ Si <literal>OrderLine</literal> lui-même possède une collection, celle-ci aura aussi
+ une clé composite étrangère.
</para>
<programlisting><![CDATA[<class name="OrderLine">
@@ -378,7 +380,7 @@
<title>Composant Dynamique</title>
<para>
- Vous pouvez m�me mapper une propri�t� de type <literal>Map</literal>:
+ Vous pouvez même mapper une propriété de type <literal>Map</literal>:
</para>
<programlisting><![CDATA[<dynamic-component name="userAttributes">
@@ -388,12 +390,12 @@
</dynamic-component>]]></programlisting>
<para>
- 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 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)
+ 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>
</para>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/configuration.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/configuration.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/configuration.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,15 +1,17 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="session-configuration" revision="1">
<title>Configuration</title>
<para>
- 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.
+ 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.
</para>
<sect1 id="configuration-programmatic" revision="1">
@@ -17,17 +19,17 @@
<para>
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
+ 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.
+ Les mappings sont constitués d'un ensemble de fichiers de mapping XML.
</para>
<para>
Vous pouvez obtenir une instance de <literal>Configuration</literal>
- en l'instanciant directement et en sp�cifiant la liste des documents
+ 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> :
+ pouvez le faire à l'aide de la méthode <literal>addResource()</literal> :
</para>
<programlisting><![CDATA[Configuration cfg = new Configuration()
@@ -35,7 +37,7 @@
.addResource("Bid.hbm.xml");]]></programlisting>
<para>
- Une alternative (parfois meilleure) est de sp�cifier les classes mapp�es
+ Une alternative (parfois meilleure) est de spécifier les classes mappées
et de laisser Hibernate trouver les documents de mapping pour vous :
</para>
@@ -47,12 +49,12 @@
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.
+ Cette approche élimine les noms de fichiers en dur.
</para>
<para>
- Une <literal>Configuration</literal> vous permet �galement de pr�ciser des
- propri�t�s de configuration :
+ Une <literal>Configuration</literal> vous permet également de préciser des
+ propriétés de configuration :
</para>
<programlisting><![CDATA[Configuration cfg = new Configuration()
@@ -63,32 +65,32 @@
.setProperty("hibernate.order_updates", "true");]]></programlisting>
<para>
- Ce n'est pas le seul moyen de passer des propri�t�s de configuration � Hibernate.
- Les diff�rentes options sont :
+ Ce n'est pas le seul moyen de passer des propriétés de configuration à Hibernate.
+ Les différentes options sont :
</para>
<orderedlist spacing="compact">
<listitem>
<para>
Passer une instance de <literal>java.util.Properties</literal>
- � <literal>Configuration.setProperties()</literal>.
+ à <literal>Configuration.setProperties()</literal>.
</para>
</listitem>
<listitem>
<para>
- Placer <literal>hibernate.properties</literal> dans un r�pertoire racine
+ Placer <literal>hibernate.properties</literal> dans un répertoire racine
du classpath
</para>
</listitem>
<listitem>
<para>
- Positionner les propri�t�s <literal>System</literal> en utilisant
+ Positionner les propriétés <literal>System</literal> en utilisant
<literal>java -Dproperty=value</literal>.
</para>
</listitem>
<listitem>
<para>
- Inclure des �l�ments <literal><property></literal> dans le
+ Inclure des éléments <literal><property></literal> dans le
fichier <literal>hibernate.cfg.xml</literal> (voir plus loin).
</para>
</listitem>
@@ -96,11 +98,11 @@
<para>
L'utilisation d'<literal>hibernate.properties</literal> est l'approche la plus
- simple si vous voulez d�marrer rapidement
+ simple si vous voulez démarrer rapidement
</para>
<para>
- La <literal>Configuration</literal> est un objet de d�marrage qui sera supprim�
- une fois qu'une <literal>SessionFactory</literal> aura �t� cr��e.
+ La <literal>Configuration</literal> est un objet de démarrage qui sera supprimé
+ une fois qu'une <literal>SessionFactory</literal> aura été créée.
</para>
</sect1>
@@ -109,16 +111,16 @@
<title>Obtenir une SessionFactory</title>
<para>
- Une fois que tous les mappings ont �t� pars�s par la <literal>Configuration</literal>,
+ 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 :
+ Cette fabrique sera partagée entre tous les threads de l'application :
</para>
<programlisting><![CDATA[SessionFactory sessions = cfg.buildSessionFactory();]]></programlisting>
<para>
- 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.
+ 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.
</para>
</sect1>
@@ -127,7 +129,7 @@
<title>Connexions JDBC</title>
<para>
- Habituellement, vous voulez que la <literal>SessionFactory</literal> cr�e les connexions JDBC et
+ 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 :
</para>
@@ -135,31 +137,31 @@
<programlisting><![CDATA[Session session = sessions.openSession(); // open a new Session]]></programlisting>
<para>
- 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.
+ 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.
</para>
<para>
- 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
+ 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.
+ décrire les paramètres de configuration des connexions JDBC les plus importants.
</para>
<para>
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
+ <literal>java.sql.DriverManager</literal> si vous positionnez les paramètres de la manière
suivante :
</para>
<table frame="topbot">
- <title>Propri�t�s JDBC d'Hibernate</title>
+ <title>Propriétés JDBC d'Hibernate</title>
<tgroup cols="2">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="1*"/>
<thead>
<row>
- <entry>Nom de la propri�t�</entry>
+ <entry>Nom de la propriété</entry>
<entry>Fonction</entry>
</row>
</thead>
@@ -185,7 +187,7 @@
<literal>hibernate.connection.username</literal>
</entry>
<entry>
- <emphasis>utilisateur de la base de donn�es</emphasis>
+ <emphasis>utilisateur de la base de données</emphasis>
</entry>
</row>
<row>
@@ -193,7 +195,7 @@
<literal>hibernate.connection.password</literal>
</entry>
<entry>
- <emphasis>mot de passe de la base de donn�es</emphasis>
+ <emphasis>mot de passe de la base de données</emphasis>
</entry>
</row>
<row>
@@ -209,19 +211,19 @@
</table>
<para>
- 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
+ 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.
</para>
<para>
- C3P0 est un pool de connexions JDBC open source distribu� avec Hibernate dans le r�pertoire
+ 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>
+ 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.
</para>
@@ -243,18 +245,18 @@
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 :
+ enregistrée dans le JNDI. Pour cela vous devrez définir au moins une des
+ propriétés suivantes :
</para>
<table frame="topbot">
- <title>Propri�t� d'une Datasource Hibernate</title>
+ <title>Propriété d'une Datasource Hibernate</title>
<tgroup cols="2">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="1*"/>
<thead>
<row>
- <entry>Nom d'une propri�t�</entry>
+ <entry>Nom d'une propriété</entry>
<entry>fonction</entry>
</row>
</thead>
@@ -288,7 +290,7 @@
<literal>hibernate.connection.username</literal>
</entry>
<entry>
- <emphasis>utilisateur de la base de donn�es</emphasis> (optionnelle)
+ <emphasis>utilisateur de la base de données</emphasis> (optionnelle)
</entry>
</row>
<row>
@@ -296,7 +298,7 @@
<literal>hibernate.connection.password</literal>
</entry>
<entry>
- <emphasis>mot de passe de la base de donn�es</emphasis> (optionnelle)
+ <emphasis>mot de passe de la base de données</emphasis> (optionnelle)
</entry>
</row>
</tbody>
@@ -316,49 +318,49 @@
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]></programlisting>
<para>
- Les connexions JDBC obtenues � partir d'une datasource JNDI participeront automatiquement
- aux transactions g�r�es par le conteneur du serveur d'applications.
+ Les connexions JDBC obtenues à partir d'une datasource JNDI participeront automatiquement
+ aux transactions gérées par le conteneur du serveur d'applications.
</para>
<para>
- 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
+ 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>.
</para>
<para>
- 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>.
+ 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>.
</para>
</sect1>
<sect1 id="configuration-optional" revision="1">
- <title>Propri�t�s de configuration optionnelles</title>
+ <title>Propriétés de configuration optionnelles</title>
<para>
- 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
+ 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.
</para>
<para>
- <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.
+ <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.
</para>
<table frame="topbot" id="configuration-optional-properties" revision="8">
- <title>Propri�t�s de configuration d'Hibernate</title>
+ <title>Propriétés de configuration d'Hibernate</title>
<tgroup cols="2">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="1*"/>
<thead>
<row>
- <entry>Nom de la propri�t�</entry>
+ <entry>Nom de la propriété</entry>
<entry>Fonction</entry>
</row>
</thead>
@@ -369,8 +371,8 @@
</entry>
<entry>
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.
+ qui permet à Hibernate de générer du SQL optimisé pour une
+ base de données relationnelle particulière.
<para>
<emphasis role="strong">ex.</emphasis>
<literal>nom.complet.de.ma.classe.de.Dialect</literal>
@@ -382,8 +384,8 @@
<literal>hibernate.show_sql</literal>
</entry>
<entry>
- Ecrit toutes les requ�tes SQL sur la console. Il s'agit d'une
- alternative au positionnement de la cat�gorie de log
+ 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>.
<para>
<emphasis role="strong">ex.</emphasis>
@@ -408,8 +410,8 @@
<literal>hibernate.default_schema</literal>
</entry>
<entry>
- Positionne dans le SQL g�n�r� un sch�ma/tablespace par d�faut pour les noms de
- table ne l'ayant pas surcharg�.
+ Positionne dans le SQL généré un schéma/tablespace par défaut pour les noms de
+ table ne l'ayant pas surchargé.
<para>
<emphasis role="strong">ex.</emphasis>
<literal>MON_SCHEMA</literal>
@@ -421,8 +423,8 @@
<literal>hibernate.default_catalog</literal>
</entry>
<entry>
- Qualifie les noms de tables non qualifi�es avec ce catalogue
- dans le SQL g�n�r�.
+ Qualifie les noms de tables non qualifiées avec ce catalogue
+ dans le SQL généré.
<para>
<emphasis role="strong">ex.</emphasis>
<literal>CATALOG_NAME</literal>
@@ -435,7 +437,7 @@
</entry>
<entry>
La <literal>SessionFactory</literal> sera automatiquement
- li�e � ce nom dans le JNDI apr�s sa cr�ation.
+ liée à ce nom dans le JNDI après sa création.
<para>
<emphasis role="strong">ex.</emphasis>
<literal>jndi/nom/hierarchique</literal>
@@ -447,14 +449,14 @@
<literal>hibernate.max_fetch_depth</literal>
</entry>
<entry>
- 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
+ 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.
<para>
<emphasis role="strong">ex.</emphasis>
- valeurs recommand�es entre <literal>0</literal> et <literal>3</literal>
+ valeurs recommandées entre <literal>0</literal> et <literal>3</literal>
</para>
</entry>
</row>
@@ -463,10 +465,10 @@
<literal>hibernate.default_batch_fetch_size</literal>
</entry>
<entry>
- D�finit une taille par d�faut pour le chargement par lot des associations
+ Définit une taille par défaut pour le chargement par lot des associations
<para>
<emphasis role="strong">ex.</emphasis>
- Valeurs recommand�es : <literal>4</literal>, <literal>8</literal>,
+ Valeurs recommandées : <literal>4</literal>, <literal>8</literal>,
<literal>16</literal>
</para>
</entry>
@@ -476,7 +478,7 @@
<literal>hibernate.default_entity_mode</literal>
</entry>
<entry>
- D�finit un mode de repr�sentation par d�faut des entit�s pour
+ Définit un mode de représentation par défaut des entités pour
toutes les sessions ouvertes depuis cette <literal>SessionFactory</literal>
<para>
<literal>dynamic-map</literal>, <literal>dom4j</literal>,
@@ -489,9 +491,9 @@
<literal>hibernate.order_updates</literal>
</entry>
<entry>
- 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.
+ 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.
<para>
<emphasis role="strong">ex.</emphasis>
<literal>true</literal> | <literal>false</literal>
@@ -503,8 +505,8 @@
<literal>hibernate.generate_statistics</literal>
</entry>
<entry>
- Si activ�, Hibernate va collecter des statistiques utiles
- pour le r�glage des performances.
+ Si activé, Hibernate va collecter des statistiques utiles
+ pour le réglage des performances.
<para>
<emphasis role="strong">ex.</emphasis>
<literal>true</literal> | <literal>false</literal>
@@ -516,9 +518,9 @@
<literal>hibernate.use_identifer_rollback</literal>
</entry>
<entry>
- 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.
+ 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.
<para>
<emphasis role="strong">ex.</emphasis>
<literal>true</literal> | <literal>false</literal>
@@ -530,8 +532,8 @@
<literal>hibernate.use_sql_comments</literal>
</entry>
<entry>
- 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>.
+ 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>.
<para>
<emphasis role="strong">ex.</emphasis>
<literal>true</literal> | <literal>false</literal>
@@ -543,13 +545,13 @@
</table>
<table frame="topbot" id="configuration-jdbc-properties" revision="8">
- <title>Propri�t�s Hibernate li�es � JDBC et aux connexions</title>
+ <title>Propriétés Hibernate liées à JDBC et aux connexions</title>
<tgroup cols="2">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="1*"/>
<thead>
<row>
- <entry>Nom de la propri�t�</entry>
+ <entry>Nom de la propriété</entry>
<entry>Fonction</entry>
</row>
</thead>
@@ -559,7 +561,7 @@
<literal>hibernate.jdbc.fetch_size</literal>
</entry>
<entry>
- Une valeur non nulle d�termine la taille de chargement
+ Une valeur non nulle détermine la taille de chargement
des statements JDBC (appelle
<literal>Statement.setFetchSize()</literal>).
</entry>
@@ -570,10 +572,10 @@
</entry>
<entry>
Une valeur non nulle active l'utilisation par Hibernate des mises
- � jour par batch de JDBC2.
+ à jour par batch de JDBC2.
<para>
<emphasis role="strong">ex.</emphasis>
- les valeurs recommand�es entre <literal>5</literal> et <literal>30</literal>
+ les valeurs recommandées entre <literal>5</literal> et <literal>30</literal>
</para>
</entry>
</row>
@@ -582,10 +584,10 @@
<literal>hibernate.jdbc.batch_versioned_data</literal>
</entry>
<entry>
- Param�trez cette propri�t� � <literal>true</literal> si votre pilote JDBC
+ 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>.
+ souvent approprié d'activer cette option). Hibernate utilisera alors le "batched DML" pour
+ versionner automatiquement les données. Par défaut = <literal>false</literal>.
<para>
<emphasis role="strong">eg.</emphasis>
<literal>true</literal> | <literal>false</literal>
@@ -597,8 +599,8 @@
<literal>hibernate.jdbc.factory_class</literal>
</entry>
<entry>
- S�lectionne un <literal>Batcher</literal> personnalis�. La
- plupart des applications n'auront pas besoin de cette propri�t�
+ Sélectionne un <literal>Batcher</literal> personnalisé. La
+ plupart des applications n'auront pas besoin de cette propriété
de configuration
<para>
<emphasis role="strong">ex.</emphasis>
@@ -612,9 +614,9 @@
</entry>
<entry>
Active l'utilisation par Hibernate des resultsets scrollables
- de JDBC2. Cette propri�t� est seulement n�cessaire lorsque l'on
+ 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.
+ Hibernate utilise les métadonnées de la connexion.
<para>
<emphasis role="strong">ex.</emphasis>
<literal>true</literal> | <literal>false</literal>
@@ -626,9 +628,9 @@
<literal>hibernate.jdbc.use_streams_for_binary</literal>
</entry>
<entry>
- Utilise des flux lorsque l'on �crit/lit des types
+ 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).
+ vers et à partir de JDBC (propriété de niveau système).
<para>
<emphasis role="strong">ex.</emphasis>
<literal>true</literal> | <literal>false</literal>
@@ -641,10 +643,10 @@
</entry>
<entry>
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.
+ 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.
<para>
<emphasis role="strong">eg.</emphasis>
<literal>true|false</literal>
@@ -656,8 +658,8 @@
<literal>hibernate.connection.provider_class</literal>
</entry>
<entry>
- Le nom de la classe d'un <literal>ConnectionProvider</literal> personnalis�
- qui fournit des connexions JDBC � Hibernate
+ Le nom de la classe d'un <literal>ConnectionProvider</literal> personnalisé
+ qui fournit des connexions JDBC à Hibernate
<para>
<emphasis role="strong">ex.</emphasis>
<literal>classname.of.ConnectionProvider</literal>
@@ -669,10 +671,10 @@
<literal>hibernate.connection.isolation</literal>
</entry>
<entry>
- 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.
+ 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.
<para>
<emphasis role="strong">ex.</emphasis>
<literal>1, 2, 4, 8</literal>
@@ -685,7 +687,7 @@
</entry>
<entry>
Active le mode de commit automatique (autocommit) pour les connexions
- JDBC du pool (non recommand�).
+ JDBC du pool (non recommandé).
<para>
<emphasis role="strong">ex.</emphasis>
<literal>true</literal> | <literal>false</literal>
@@ -697,13 +699,13 @@
<literal>hibernate.connection.release_mode</literal>
</entry>
<entry>
- 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
+ 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>.
+ 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.
@@ -719,8 +721,8 @@
<literal>hibernate.connection.<emphasis><propertyName></emphasis></literal>
</entry>
<entry>
- Passe la propri�t� JDBC<literal>propertyName</literal>
- � <literal>DriverManager.getConnection()</literal>.
+ Passe la propriété JDBC<literal>propertyName</literal>
+ à <literal>DriverManager.getConnection()</literal>.
</entry>
</row>
<row>
@@ -728,7 +730,7 @@
<literal>hibernate.jndi.<emphasis><propertyName></emphasis></literal>
</entry>
<entry>
- Passe la propri�t� <literal>propertyName</literal> � l'<literal>InitialContextFactory</literal>
+ Passe la propriété <literal>propertyName</literal> à l'<literal>InitialContextFactory</literal>
de JNDI.
</entry>
</row>
@@ -737,13 +739,13 @@
</table>
<table frame="topbot" id="configuration-cache-properties" revision="7">
- <title>Propri�t�s du Cache d'Hibernate</title>
+ <title>Propriétés du Cache d'Hibernate</title>
<tgroup cols="2">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="1*"/>
<thead>
<row>
- <entry>Nom de la propri�t�</entry>
+ <entry>Nom de la propriété</entry>
<entry>Fonction</entry>
</row>
</thead>
@@ -754,7 +756,7 @@
</entry>
<entry>
Le nom de classe d'un <literal>CacheProvider</literal>
- sp�cifique.
+ spécifique.
<para>
<emphasis role="strong">ex.</emphasis>
<literal>nom.de.classe.du.CacheProvider</literal>
@@ -766,10 +768,10 @@
<literal>hibernate.cache.use_minimal_puts</literal>
</entry>
<entry>
- 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.
+ 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.
<para>
<emphasis role="strong">ex.</emphasis>
<literal>true|false</literal>
@@ -781,8 +783,8 @@
<literal>hibernate.cache.use_query_cache</literal>
</entry>
<entry>
- 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.
+ 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.
<para>
<emphasis role="strong">ex.</emphasis>
<literal>true|false</literal>
@@ -794,8 +796,8 @@
<literal>hibernate.cache.use_second_level_cache</literal>
</entry>
<entry>
- 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
+ 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.
<para>
<emphasis role="strong">ex.</emphasis>
@@ -809,7 +811,7 @@
</entry>
<entry>
Le nom de classe d'une interface <literal>QueryCacheFactory</literal> ,
- par d�faut = built-in <literal>StandardQueryCacheFactory</literal>.
+ par défaut = built-in <literal>StandardQueryCacheFactory</literal>.
<para>
<emphasis role="strong">ex.</emphasis>
<literal>nom.de.la.classe.de.QueryCacheFactory</literal>
@@ -822,7 +824,7 @@
<literal>hibernate.cache.region_prefix</literal>
</entry>
<entry>
- Un pr�fixe � utiliser pour le nom des r�gions du
+ Un préfixe à utiliser pour le nom des régions du
cache de second niveau.
<para>
<emphasis role="strong">ex.</emphasis>
@@ -835,8 +837,8 @@
<literal>hibernate.cache.use_structured_entries</literal>
</entry>
<entry>
- Force Hibernate � stocker les donn�es dans le cache de
- second niveau dans un format plus adapt� � la visualisation
+ Force Hibernate à stocker les données dans le cache de
+ second niveau dans un format plus adapté à la visualisation
par un humain.
<para>
<emphasis role="strong">ex.</emphasis>
@@ -849,13 +851,13 @@
</table>
<table frame="topbot" id="configuration-transaction-properties" revision="9">
- <title>Propri�t�s des transactions Hibernate</title>
+ <title>Propriétés des transactions Hibernate</title>
<tgroup cols="2">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="1*"/>
<thead>
<row>
- <entry>Nom de la propri�t�</entry>
+ <entry>Nom de la propriété</entry>
<entry>Fonction</entry>
</row>
</thead>
@@ -866,8 +868,8 @@
</entry>
<entry>
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
+ qui sera utilisée par l'API <literal>Transaction</literal>
+ d'Hibernate (la valeur par défaut est
<literal>JDBCTransactionFactory</literal>).
<para>
<emphasis role="strong">ex.</emphasis>
@@ -880,7 +882,7 @@
<literal>jta.UserTransaction</literal>
</entry>
<entry>
- Le nom JNDI utilis� par la <literal>JTATransactionFactory</literal>
+ Le nom JNDI utilisé par la <literal>JTATransactionFactory</literal>
pour obtenir la <literal>UserTransaction</literal> JTA du serveur
d'applications.
<para>
@@ -895,8 +897,8 @@
</entry>
<entry>
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.
+ - requis lorsque le cache de niveau JVM est activé ou lorsque l'on
+ utilise un générateur hilo dans un environnement JTA.
<para>
<emphasis role="strong">ex.</emphasis>
<literal>nom.de.classe.du.TransactionManagerLookup</literal>
@@ -908,10 +910,10 @@
<literal>hibernate.transaction.flush_before_completion</literal>
</entry>
<entry>
- Si activ�, la session sera automatiquement vid�e durant la phase
- qui pr�c�de la fin de la transaction (before completion).
+ 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
+ recommandée, voir
<xref linkend="architecture-current-session"/>.
<para>
<emphasis role="strong">ex.</emphasis>
@@ -924,10 +926,10 @@
<literal>hibernate.transaction.auto_close_session</literal>
</entry>
<entry>
- Si activ�, la session sera automatiquement ferm� pendant la phase
+ 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
+ recommandée, voir
<para>
<emphasis role="strong">ex.</emphasis>
<literal>true</literal> | <literal>false</literal>
@@ -939,13 +941,13 @@
</table>
<table frame="topbot" id="configuration-misc-properties" revision="9">
- <title>Propri�t�s diverses</title>
+ <title>Propriétés diverses</title>
<tgroup cols="2">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="1*"/>
<thead>
<row>
- <entry>Nom de la propri�t�</entry>
+ <entry>Nom de la propriété</entry>
<entry>Fonction</entry>
</row>
</thead>
@@ -955,10 +957,10 @@
<literal>hibernate.current_session_context_class</literal>
</entry>
<entry>
- Fournit une strat�gie particuli�re pour contextualiser
+ 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.
+ d'informations sur les stratégies fournies.
<para>
<emphasis role="strong">eg.</emphasis>
<literal>jta</literal> | <literal>thread</literal> |
@@ -971,7 +973,7 @@
<literal>hibernate.query.factory_class</literal>
</entry>
<entry>
- Choisi l'impl�mentation du parseur de requ�te
+ Choisi l'implémentation du parseur de requête
<para>
<emphasis role="strong">ex.</emphasis>
<literal>org.hibernate.hql.ast.ASTQueryTranslatorFactory</literal> ou
@@ -984,9 +986,9 @@
<literal>hibernate.query.substitutions</literal>
</entry>
<entry>
- 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).
+ 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).
<para>
<emphasis role="strong">ex.</emphasis>
<literal>hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC</literal>
@@ -998,11 +1000,11 @@
<literal>hibernate.hbm2ddl.auto</literal>
</entry>
<entry>
- Valide ou exporte automatiquement le sch�ma DDL vers la base de donn�es
- lorsque la <literal>SessionFactory</literal> est cr��e.
+ 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.
+ le schéma de base de données lorsque la <literal>SessionFactory</literal>
+ est fermée explicitement.
<para>
<emphasis role="strong">ex.</emphasis>
<literal>validate</literal> | <literal>update</literal> |
@@ -1015,11 +1017,11 @@
<literal>hibernate.cglib.use_reflection_optimizer</literal>
</entry>
<entry>
- 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>.
+ 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>.
<para>
<emphasis role="strong">ex.</emphasis>
<literal>true</literal> | <literal>false</literal>
@@ -1034,11 +1036,11 @@
<title>Dialectes SQL</title>
<para>
- 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.
+ 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.
</para>
<table frame="topbot" id="sql-dialects" revision="2">
@@ -1129,24 +1131,24 @@
<title>Chargement par Jointure Ouverte</title>
<para>
- 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.
+ 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.
</para>
<para>
- 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>.
+ 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
+ pour les associatiosn un-à-un et plusieurs-à-un qui ont été mappée avec
<literal>fetch="join"</literal>.
</para>
<para>
- Reportez vous � <xref linkend="performance-fetching"/> pour plus d'information.
+ Reportez vous à <xref linkend="performance-fetching"/> pour plus d'information.
</para>
</sect2>
@@ -1155,33 +1157,33 @@
<title>Flux binaires</title>
<para>
- 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
+ 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>
+ la propriété <literal>hibernate.jdbc.use_streams_for_binary</literal>. <emphasis>C'est une
+ fonctionalité de niveau système uniquement.</emphasis>
</para>
</sect2>
<sect2 id="configuration-optional-cacheprovider" revision="2">
- <title>Cache de second niveau et cache de requ�tes</title>
+ <title>Cache de second niveau et cache de requêtes</title>
<para>
- 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.
+ 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.
</para>
</sect2>
<sect2 id="configuration-optional-querysubstitution">
- <title>Substitution dans le langage de requ�tage</title>
+ <title>Substitution dans le langage de requêtage</title>
<para>
- Vous pouvez d�finir de nouveaux tokens dans les requ�tes Hibernate en utilisant la propri�t�
+ Vous pouvez définir de nouveaux tokens dans les requêtes Hibernate en utilisant la propriété
<literal>hibernate.query.substitutions</literal>. Par exemple :
</para>
@@ -1189,7 +1191,7 @@
<para>
remplacerait les tokens <literal>vrai</literal> et <literal>faux</literal> par
- des entiers dans le SQL g�n�r�.
+ des entiers dans le SQL généré.
</para>
<programlisting>hibernate.query.substitutions toLowercase=LOWER</programlisting>
@@ -1205,9 +1207,9 @@
<para>
Si vous activez <literal>hibernate.generate_statistics</literal>, Hibernate va
- fournir un certains nombre de m�triques utiles pour r�gler les performances
+ 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.
+ 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.
</para>
@@ -1219,65 +1221,65 @@
<title>Tracer</title>
<para>
- Hibernate trace divers �v�nements en utilisant Apache commons-logging.
+ Hibernate trace divers évènements en utilisant Apache commons-logging.
</para>
<para>
- Le service commons-logging d�l�guera directement � Apache Log4j
+ 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
+ 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>.
+ <literal>log4j.properties</literal>. Un exemple de fichier est distribué
+ avec Hibernate dans le répertoire <literal>src/</literal>.
</para>
<para>
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
+ 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 :
+ Les catégories de trace les plus intéressantes sont les suivantes :
</para>
<table frame="topbot" id="log-categories" revision="2">
- <title>Cat�gories de trace d'Hibernate</title>
+ <title>Catégories de trace d'Hibernate</title>
<tgroup cols="2">
<colspec colwidth="1*"/>
<colspec colwidth="2.5*"/>
<thead>
<row>
- <entry>Cat�gorie</entry>
+ <entry>Catégorie</entry>
<entry>Fonction</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>org.hibernate.SQL</literal></entry>
- <entry>Trace toutes les requ�ts SQL de type DML (gestion des donn�es) qui sont ex�cut�es</entry>
+ <entry>Trace toutes les requêts SQL de type DML (gestion des données) qui sont exécutées</entry>
</row>
<row>
<entry><literal>org.hibernate.type</literal></entry>
- <entry>Trace tous les param�tres JDBC</entry>
+ <entry>Trace tous les paramètres JDBC</entry>
</row>
<row>
<entry><literal>org.hibernate.tool.hbm2ddl</literal></entry>
- <entry>Trace toutes les requ�ts SQL de type DDL (gestion de la structure de la base) qui sont ex�cut�es</entry>
+ <entry>Trace toutes les requêts SQL de type DDL (gestion de la structure de la base) qui sont exécutées</entry>
</row>
<row>
<entry><literal>org.hibernate.pretty</literal></entry>
<entry>
- Trace l'�tat de toutes les entit�s (20 entit�s maximum) qui
- sont associ�es avec la session hibernate au moment du flush
+ Trace l'état de toutes les entités (20 entités maximum) qui
+ sont associées avec la session hibernate au moment du flush
</entry>
</row>
<row>
<entry><literal>org.hibernate.cache</literal></entry>
- <entry>Trace toute l'activit� du cache de second niveau</entry>
+ <entry>Trace toute l'activité du cache de second niveau</entry>
</row>
<row>
<entry><literal>org.hibernate.transaction</literal></entry>
- <entry>Trace toute l'activit� relative aux transactions</entry>
+ <entry>Trace toute l'activité relative aux transactions</entry>
</row>
<row>
<entry><literal>org.hibernate.jdbc</literal></entry>
@@ -1286,7 +1288,7 @@
<row>
<entry><literal>org.hibernate.hql.ast.AST</literal></entry>
<entry>
- Trace l'arbre syntaxique des requ�tes HQL et SQL durant l'analyse syntaxique des requ�tes
+ Trace l'arbre syntaxique des requêtes HQL et SQL durant l'analyse syntaxique des requêtes
</entry>
</row>
<row>
@@ -1296,7 +1298,7 @@
<row>
<entry><literal>org.hibernate</literal></entry>
<entry>
- Trace tout (beaucoupe d'informations, mais tr�s utile pour r�soudre les probl�mes).
+ Trace tout (beaucoupe d'informations, mais très utile pour résoudre les problèmes).
</entry>
</row>
</tbody>
@@ -1304,34 +1306,34 @@
</table>
<para>
- 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.
+ 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.
</para>
</sect1>
<sect1 id="configuration-namingstrategy">
- <title>Impl�menter une <literal>NamingStrategy</literal></title>
+ <title>Implémenter une <literal>NamingStrategy</literal></title>
<para>
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.
+ spécifier une "stratégie de nommage" des objets et éléments de la base de données.
</para>
<para>
- 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.
+ 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.
</para>
<para>
- Vous pouvez d�finir une strat�gie diff�rente en appelant
+ Vous pouvez définir une stratégie différente en appelant
<literal>Configuration.setNamingStrategy()</literal> avant d'ajouter des
mappings :
</para>
@@ -1344,7 +1346,7 @@
<para>
<literal>net.sf.hibernate.cfg.ImprovedNamingStrategy</literal> est une
- strat�gie fournie qui peut �tre utile comme point de d�part de quelques
+ stratégie fournie qui peut être utile comme point de départ de quelques
applications.
</para>
@@ -1354,14 +1356,14 @@
<title>Fichier de configuration XML</title>
<para>
- 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.
+ 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.
</para>
<para>
- Le fichier de configuration XML doit par d�faut se placer � la racine
+ Le fichier de configuration XML doit par défaut se placer à la racine
du <literal>CLASSPATH</literal>. En voici un exemple :
</para>
@@ -1401,14 +1403,14 @@
<para>
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
+ 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.
+ <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.
</para>
<para>
- Avec la configuration XML, d�marrer Hibernate devient donc aussi simple que ceci :
+ Avec la configuration XML, démarrer Hibernate devient donc aussi simple que ceci :
</para>
<programlisting><![CDATA[SessionFactory sf = new Configuration().configure().buildSessionFactory();]]></programlisting>
@@ -1418,24 +1420,24 @@
</sect1>
<sect1 id="configuration-j2ee" revision="1">
- <title>Int�gration � un serveur d'application J2EE</title>
+ <title>Intégration à un serveur d'application J2EE</title>
<para>
- Hibernate poss�de les points suivants d'int�gration � l'infrastructure J2EE :
+ Hibernate possède les points suivants d'intégration à l'infrastructure J2EE :
</para>
<itemizedlist>
<listitem>
<para>
- <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
+ <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
+ 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.
+ la portabilité de votre code entre plusieurs serveurs d'application.
</para>
</listitem>
</itemizedlist>
@@ -1444,7 +1446,7 @@
<listitem>
<para>
<emphasis>Association JNDI automatique</emphasis>: Hibernate peut associer sa
- <literal>SessionFactory</literal> � JNDI apr�s le d�marrage.
+ <literal>SessionFactory</literal> à JNDI après le démarrage.
</para>
</listitem>
</itemizedlist>
@@ -1452,12 +1454,12 @@
<itemizedlist>
<listitem>
<para>
- <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
+ <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.
+ démarcation des transactions se fait de manière déclarative dans les descripteurs de déploiement.
</para>
</listitem>
</itemizedlist>
@@ -1465,41 +1467,41 @@
<itemizedlist>
<listitem>
<para>
- <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
+ <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).
+ 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).
</para>
</listitem>
</itemizedlist>
<para>
- En fonction de votre environnement, vous devrez peut �tre mettre l'option de
- configuration <literal>hibernate.connection.aggressive_release</literal> � vrai si
+ 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".
</para>
<sect2 id="configuration-optional-transactionstrategy" revision="3">
- <title>Configuration de la strat�gie transactionnelle</title>
+ <title>Configuration de la stratégie transactionnelle</title>
<para>
- 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
+ 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.
+ 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.
</para>
<para>
- Pour conserver votre code portable entre ces deux environnements (et d'autres �ventuels)
+ 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�
+ 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>.
</para>
@@ -1511,38 +1513,38 @@
<varlistentry>
<term><literal>net.sf.hibernate.transaction.JDBCTransactionFactory</literal></term>
<listitem>
- <para>d�l�gue aux transactions de la base de donn�es (JDBC). Valeur par d�faut.</para>
+ <para>délègue aux transactions de la base de données (JDBC). Valeur par défaut.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>org.hibernate.transaction.JTATransactionFactory</literal></term>
<listitem>
<para>
- 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.
+ 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.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>org.hibernate.transaction.CMTTransactionFactory</literal></term>
<listitem>
- <para>d�l�gue � aux transactions JTA g�r�es par le conteneur</para>
+ <para>délègue à aux transactions JTA gérées par le conteneur</para>
</listitem>
</varlistentry>
</variablelist>
<para>
- Vous pouvez �galement d�finir votre propre strat�gie transactionnelle
+ Vous pouvez également définir votre propre stratégie transactionnelle
(pour un service de transaction CORBA par exemple).
</para>
<para>
- 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.
+ 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.
</para>
<table frame="topbot" id="jtamanagerlookup" revision="1">
@@ -1604,37 +1606,37 @@
</sect2>
<sect2 id="configuration-optional-jndi" revision="3">
- <title><literal>SessionFactory</literal> associ�e au JNDI</title>
+ <title><literal>SessionFactory</literal> associée au JNDI</title>
<para>
- 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.
+ 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.
</para>
<para>
- 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).
+ 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).
</para>
<para>
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�.
+ pour instancier un contexte d'initialisation. S'ils ne sont pas spécifiés,
+ l'<literal>InitialContext</literal> par défaut sera utilisé.
</para>
<para>
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.
+ 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.
</para>
<para>
Si vous utilisez <literal>SessionFactory</literal> JNDI, un EJB ou n'importe quelle autre classe
@@ -1642,55 +1644,55 @@
</para>
<para>
- 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
+ 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.
+ est aussi un moyen efficace de démarrer Hibernate—voir chapitre 1.
</para>
</sect2>
<sect2 id="configuration-j2ee-currentsession" revision="4">
- <title>Association automatique de la Session � JTA</title>
+ <title>Association automatique de la Session à JTA</title>
<para>
- Le moyen le plus simple de g�rer les <literal>Session</literal>s et transactions est
+ 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</xref>.
+ Voir détail à <xref linkend="architecture-current-session">current sessions</xref>.
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
+ 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,
+ 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.
+ 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.
</para>
</sect2>
<sect2 id="configuration-j2ee-jmx" revision="1">
- <title>D�ploiement JMX</title>
+ <title>Déploiement JMX</title>
<para>
- La ligne <literal>cfg.buildSessionFactory()</literal> doit toujours �tre ex�cut�e
+ 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>.
+ déployer Hibernate en temps que <emphasis>service managé</emphasis>.
</para>
<para>
- 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
+ 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:
</para>
@@ -1738,14 +1740,14 @@
</server>]]></programlisting>
<para>
- Ce fichier est d�ploy� dans un r�pertoire <literal>META-INF</literal> et est packag�
+ 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
+ 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.
+ 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.
</para>
</sect2>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/events.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/events.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/events.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,11 +1,13 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="events">
- <title>Les intercepteurs et les �v�nements</title>
+ <title>Les intercepteurs et les événements</title>
<para>
- 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.
+ 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.
</para>
<sect1 id="objectstate-interceptors" revision="2">
@@ -13,18 +15,18 @@
<para>
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.
+ 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.
+ <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.
</para>
<para>
- Vous pouvez soit impl�menter <literal>Interceptor</literal> directement ou (mieux)
- �tendre <literal>EmptyInterceptor</literal>.
+ Vous pouvez soit implémenter <literal>Interceptor</literal> directement ou (mieux)
+ étendre <literal>EmptyInterceptor</literal>.
</para>
<programlisting><![CDATA[package org.hibernate.test;
@@ -115,14 +117,14 @@
}]]></programlisting>
<para>
- L'intercepteur doit �tre sp�cifi� quand une session est cr��e.
+ L'intercepteur doit être spécifié quand une session est créée.
</para>
<programlisting><![CDATA[Session session = sf.openSession( new AuditInterceptor() );]]></programlisting>
<para>
Vous pouvez aussi mettre un intercepteur au niveau global, en utilisant l'objet <literal>Configuration</literal>.
- Dans ce cas, l'intercepteur doit �tre "threadsafe".
+ Dans ce cas, l'intercepteur doit être "threadsafe".
</para>
<programlisting><![CDATA[new Configuration().setInterceptor( new AuditInterceptor() );]]></programlisting>
@@ -130,49 +132,49 @@
</sect1>
<sect1 id="objectstate-events" revision="3">
- <title>Syst�me d'�v�nements</title>
+ <title>Système d'événements</title>
<para>
- 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.
+ 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.
</para>
<para>
- 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
+ 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
+ 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 traitement des
- requ�tes <literal>load()</literal> faites par la <literal>Session</literal>.
+ 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 traitement des
+ requêtes <literal>load()</literal> faites par la <literal>Session</literal>.
</para>
<para>
- 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
+ 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.
</para>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[public class MyLoadListener implements LoadEventListener {
- // C'est une simple m�thode d�finie par l'interface LoadEventListener
+ // C'est une simple méthode définie par l'interface LoadEventListener
public void onLoad(LoadEvent event, LoadEventListener.LoadType loadType)
throws HibernateException {
if ( !MySecurity.isAuthorized( event.getEntityClassName(), event.getEntityId() ) ) {
@@ -182,8 +184,8 @@
}]]></programlisting>
<para>
- Vous avez aussi besoin d'une entr�e de configuration disant � Hibernate d'utiliser
- ce listener en plus du listener par d�faut :
+ Vous avez aussi besoin d'une entrée de configuration disant à Hibernate d'utiliser
+ ce listener en plus du listener par défaut :
</para>
<programlisting><![CDATA[<hibernate-configuration>
@@ -205,33 +207,33 @@
cfg.EventListeners().setLoadEventListeners(stack);]]></programlisting>
<para>
- 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
+ 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.
</para>
<para>
- 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.
+ 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.
</para>
</sect1>
<sect1 id="objectstate-decl-security" revision="2">
- <title>S�curit� d�clarative d'Hibernate</title>
+ <title>Sécurité déclarative d'Hibernate</title>
<para>
- 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.
+ 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.
</para>
<para>
- D'abord, vous devez configurer les listeners d'�v�nements appropri�s pour permettre
+ D'abord, vous devez configurer les listeners d'événements appropriés pour permettre
l'utilisation d'autorisations JAAS.
</para>
@@ -243,18 +245,18 @@
<para>
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.
+ quand il y a exactement un listener pour un type d'événement particulier.
</para>
<para>
- Ensuite, toujours dans <literal>hibernate.cfg.xml</literal>, lier les permissions aux r�les :
+ Ensuite, toujours dans <literal>hibernate.cfg.xml</literal>, lier les permissions aux rôles :
</para>
<programlisting><![CDATA[<grant role="admin" entity-name="User" actions="insert,update,read"/>
<grant role="su" entity-name="User" actions="*"/>]]></programlisting>
<para>
- Les noms de r�le sont les r�les compris par votre fournisseur JAAC.
+ Les noms de rôle sont les rôles compris par votre fournisseur JAAC.
</para>
</sect1>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/example_mappings.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/example_mappings.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/example_mappings.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,19 +1,6 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
- ~ Copyright (c) 2007, Red Hat Middleware, LLC. All rights reserved.
- ~
- ~ This copyrighted material is made available to anyone wishing to use, modify,
- ~ copy, or redistribute it subject to the terms and conditions of the GNU
- ~ Lesser General Public License, v. 2.1. This program is distributed in the
- ~ hope that it will be useful, but WITHOUT A WARRANTY; without even the implied
- ~ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- ~ Lesser General Public License for more details. You should have received a
- ~ copy of the GNU Lesser General Public License, v.2.1 along with this
- ~ distribution; if not, write to the Free Software Foundation, Inc.,
- ~ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- ~
- ~ Red Hat Author(s): Steve Ebersole
- -->
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="example-mappings">
<title>Exemple : quelques mappings</title>
@@ -22,14 +9,14 @@
</para>
<sect1 id="example-mappings-emp">
- <title>Employeur/Employ� (Employer/Employee)</title>
+ <title>Employeur/Employé (Employer/Employee)</title>
<para>
- 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.
+ 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.
</para>
<mediaobject>
@@ -95,7 +82,7 @@
</hibernate-mapping>]]></programlisting>
<para>
- Et voici le sch�ma des tables g�n�r�es par <literal>SchemaExport</literal>.
+ Et voici le schéma des tables générées par <literal>SchemaExport</literal>.
</para>
<programlisting><![CDATA[create table employers (
@@ -138,12 +125,12 @@
<title>Auteur/Travail (Author/Work)</title>
<para>
- 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>
+ 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>.
+ 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>.
</para>
<mediaobject>
@@ -156,7 +143,7 @@
</mediaobject>
<para>
- Le mapping suivant repr�sente exactement ces relations :
+ Le mapping suivant représente exactement ces relations :
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -214,9 +201,9 @@
<para>
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.
+ 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>.
+ à works. Voici le schéma de tables, généré par <literal>SchemaExport</literal>.
</para>
<programlisting><![CDATA[create table works (
@@ -260,14 +247,14 @@
<title>Client/Commande/Produit (Customer/Order/Product)</title>
<para>
- Imaginons maintenant le mod�le de relation entre <literal>Customer</literal>,
+ 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>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
+ <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.
+ Hibernate, on appelle cela un élément composite.
</para>
<mediaobject>
@@ -323,8 +310,8 @@
<para>
<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.
+ <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.
</para>
<programlisting><![CDATA[create table customers (
@@ -404,7 +391,7 @@
</sect2>
<sect2 id="example-mappings-composite-key">
- <title>Exemple de clef compos�e</title>
+ <title>Exemple de clef composée</title>
<programlisting><![CDATA[<class name="Customer">
<id name="customerId"
@@ -521,7 +508,7 @@
</sect2>
<sect2 id="example-mappings-composite-key-manytomany">
- <title>Many-to-many avec une clef compos�e partag�e</title>
+ <title>Many-to-many avec une clef composée partagée</title>
<programlisting><![CDATA[<class name="User" table="`User`">
<composite-id>
<key-property name="name"/>
@@ -560,7 +547,7 @@
</sect2>
<sect2 id="example-mappings-content-discrimination">
- <title>Contenu bas� sur une discrimination</title>
+ <title>Contenu basé sur une discrimination</title>
<programlisting><![CDATA[<class name="Person"
discriminator-value="P">
@@ -614,7 +601,7 @@
</sect2>
<sect2 id="example-mappings-association-alternatekeys" revision="2">
- <title>Associations sur des clefs altern�es</title>
+ <title>Associations sur des clefs alternées</title>
<programlisting><![CDATA[<class name="Person">
<id name="id">
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/example_parentchild.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/example_parentchild.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/example_parentchild.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,61 +1,63 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="example-parentchild">
- <title>Exemple : P�re/Fils</title>
+ <title>Exemple : Père/Fils</title>
<para>
- 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 mod�liser efficacement et �l�gamment une relation p�re/fils, ce n'est vraiment
+ 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 modéliser efficacement et élégamment une relation père/fils, ce n'est vraiment
pas difficile !
</para>
<sect1 id="example-parentchild-collections">
- <title>Une note � propos des collections</title>
+ <title>Une note à propos des collections</title>
<para>
- 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 :
+ 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 :
</para>
<itemizedlist>
<listitem>
<para>
- Quand nous ajoutons / retirons un objet d'une collection, le num�ro de version du
- propri�taire de la collection est incr�ment�.
+ Quand nous ajoutons / retirons un objet d'une collection, le numéro de version du
+ propriétaire de la collection est incrémenté.
</para>
</listitem>
<listitem>
<para>
- 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.
+ 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.
</para>
</listitem>
<listitem>
<para>
- 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�.
+ 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é.
</para>
</listitem>
</itemizedlist>
<para>
- 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.
+ 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.
</para>
</sect1>
@@ -84,16 +86,16 @@
session.flush();]]></programlisting>
<para>
- Hibernate ex�cuterait deux ordres SQL:
+ Hibernate exécuterait deux ordres SQL:
</para>
<itemizedlist>
<listitem>
- <para>un <literal>INSERT</literal> pour cr�er l'enregistrement pour <literal>c</literal></para>
+ <para>un <literal>INSERT</literal> pour créer l'enregistrement pour <literal>c</literal></para>
</listitem>
<listitem>
<para>
- un <literal>UPDATE</literal> pour cr�er le lien de <literal>p</literal> vers
+ un <literal>UPDATE</literal> pour créer le lien de <literal>p</literal> vers
<literal>c</literal>
</para>
</listitem>
@@ -101,8 +103,8 @@
<para>
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 :
+ 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 :
</para>
<programlisting><![CDATA[<set name="children">
@@ -111,25 +113,25 @@
</set>]]></programlisting>
<para>
- Cependant ce n'est pas la solution recommand�e.
+ Cependant ce n'est pas la solution recommandée.
</para>
<para>
- 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 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>.
</para>
<programlisting><![CDATA[<many-to-one name="parent" column="parent_id" not-null="true"/>]]></programlisting>
<para>
- (Nous avons aussi besoin d'ajouter la propri�t� <literal>parent</literal> dans la classe <literal>Child</literal>).
+ (Nous avons aussi besoin d'ajouter la propriété <literal>parent</literal> dans la classe <literal>Child</literal>).
</para>
<para>
- 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>.
+ 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>.
</para>
<programlisting><![CDATA[<set name="children" inverse="true">
@@ -138,7 +140,7 @@
</set>]]></programlisting>
<para>
- Le code suivant serait utilis� pour ajouter un nouveau <literal>Child</literal>
+ Le code suivant serait utilisé pour ajouter un nouveau <literal>Child</literal>
</para>
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
@@ -149,11 +151,11 @@
session.flush();]]></programlisting>
<para>
- Maintenant, seul un <literal>INSERT</literal> SQL est n�cessaire !
+ Maintenant, seul un <literal>INSERT</literal> SQL est nécessaire !
</para>
<para>
- Pour all�ger encore un peu les choses, nous devrions cr�er une m�thode <literal>addChild()</literal>
+ Pour alléger encore un peu les choses, nous devrions créer une méthode <literal>addChild()</literal>
dans <literal>Parent</literal>.
</para>
@@ -188,7 +190,7 @@
</set>]]></programlisting>
<para>
- Simplifie le code pr�c�dent en
+ Simplifie le code précédent en
</para>
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
@@ -197,9 +199,9 @@
session.flush();]]></programlisting>
<para>
- De la m�me mani�re, nous n'avons pas � it�rer sur les fils lorsque nous sauvons
+ 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.
+ et tous ses fils de la base de données.
</para>
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
@@ -217,7 +219,7 @@
session.flush();]]></programlisting>
<para>
- n'effacera pas <literal>c</literal> de la base de donn�es, il enl�vera seulement
+ 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>.
@@ -230,8 +232,8 @@
session.flush();]]></programlisting>
<para>
- 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�.
+ 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>.
</para>
@@ -241,9 +243,9 @@
</set>]]></programlisting>
<para>
- 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.
+ 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>.
</para>
@@ -253,26 +255,26 @@
<title>Cascades et <literal>unsaved-value</literal></title>
<para>
- 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
+ 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
+ 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
+ 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
+ <emphasis>Dans Hibernate3, il n'est plus nécessaire de spécifier
une <literal>unsaved-value</literal> explicitement.</emphasis>
</para>
<para>
- Le code suivant mettra � jour <literal>parent</literal> et <literal>child</literal>
- et ins�rera <literal>newChild</literal>.
+ Le code suivant mettra à jour <literal>parent</literal> et <literal>child</literal>
+ et insérera <literal>newChild</literal>.
</para>
- <programlisting><![CDATA[//parent et child ont �t� charg�s dans une session pr�c�dente
+ <programlisting><![CDATA[//parent et child ont été chargés dans une session précédente
parent.addChild(child);
Child newChild = new Child();
parent.addChild(newChild);
@@ -280,12 +282,12 @@
session.flush();]]></programlisting>
<para>
- 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.
+ 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.
</para>
<!-- undocumenting
@@ -354,19 +356,19 @@
<title>Conclusion</title>
<para>
- Il y a quelques principes � ma�triser dans ce chapitre et tout cela peut para�tre d�routant la premi�re fois.
+ 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.
+ le pattern père / fils.
</para>
<para>
- 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.
+ 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.
</para>
</sect1>
-</chapter>
\ No newline at end of file
+</chapter>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/example_weblog.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/example_weblog.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/example_weblog.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,4 +1,6 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="example-weblog">
<title>Exemple : application Weblog</title>
@@ -6,9 +8,9 @@
<title>Classes persistantes</title>
<para>
- 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.
+ 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.
</para>
@@ -91,7 +93,7 @@
<title>Mappings Hibernate</title>
<para>
- Le mapping XML doit maintenant �tre relativement simple � vos yeux.
+ Le mapping XML doit maintenant être relativement simple à vos yeux.
</para>
<programlisting><![CDATA[<?xml version="1.0"?>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/filters.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/filters.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/filters.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,32 +1,34 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="filters">
- <title>Filtrer les donn�es</title>
+ <title>Filtrer les données</title>
<para>
- 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.
+ 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.
</para>
<sect1 id="objectstate-filters">
<title>Filtres Hibernate</title>
<para>
- 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
+ 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.
</para>
<para>
- 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> :
+ 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> :
</para>
<programlisting><![CDATA[<filter-def name="myFilter">
@@ -34,7 +36,7 @@
</filter-def>]]></programlisting>
<para>
- Puis, ce filtre peut �tre attach� � une classe :
+ Puis, ce filtre peut être attaché à une classe :
</para>
<programlisting><![CDATA[<class name="myClass" ...>
@@ -43,7 +45,7 @@
</class>]]></programlisting>
<para>
- ou � une collection :
+ ou à une collection :
</para>
<programlisting><![CDATA[<set ...>
@@ -51,27 +53,27 @@
</set>]]></programlisting>
<para>
- ou m�me aux deux (ou � plusieurs de chaque) en m�me temps.
+ ou même aux deux (ou à plusieurs de chaque) en même temps.
</para>
<para>
- Les m�thodes sur <literal>Session</literal> sont : <literal>enableFilter(String filterName)</literal>,
+ 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
+ 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 � :
+ <literal>Filter</literal>. Utiliser le simple filtre défini au-dessus ressemblerait à :
</para>
<programlisting><![CDATA[session.enableFilter("myFilter").setParameter("myFilterParam", "some-value");]]></programlisting>
<para>
- Notez que des m�thodes sur l'interface org.hibernate.Filter autorisent le cha�nage de beaucoup
- de m�thodes communes d'Hibernate.
+ Notez que des méthodes sur l'interface org.hibernate.Filter autorisent le chaînage de beaucoup
+ de méthodes communes d'Hibernate.
</para>
<para>
- Un exemple complet, utilisant des donn�es temporelles avec une structure de date
+ Un exemple complet, utilisant des données temporelles avec une structure de date
d'enregistrement effectif :
</para>
@@ -104,9 +106,9 @@
</class>]]></programlisting>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[Session session = ...;
@@ -117,16 +119,16 @@
]]></programlisting>
<para>
- 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.
+ 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.
</para>
<para>
- 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.
+ 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.
</para>
</sect1>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/inheritance_mapping.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/inheritance_mapping.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/inheritance_mapping.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,18 +1,20 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="inheritance">
- <title>Mapping d'h�ritage de classe</title>
+ <title>Mapping d'héritage de classe</title>
<sect1 id="inheritance-strategies" revision="3">
- <title>Les trois strat�gies</title>
+ <title>Les trois stratégies</title>
<para>
- Hibernate supporte les trois strat�gies d'h�ritage de base :
+ Hibernate supporte les trois stratégies d'héritage de base :
</para>
<itemizedlist>
<listitem>
<para>
- une table par hi�rarchie de classe (table per class hierarchy)
+ une table par hiérarchie de classe (table per class hierarchy)
</para>
</listitem>
<listitem>
@@ -22,13 +24,13 @@
</listitem>
<listitem>
<para>
- une table par classe concr�te (table per concrete class)
+ une table par classe concrète (table per concrete class)
</para>
</listitem>
</itemizedlist>
<para>
- Hibernate supporte en plus une quatri�mestrat�gie, l�g�rement diff�rente, qui supporte le polymorphisme :
+ Hibernate supporte en plus une quatrièmestratégie, légèrement différente, qui supporte le polymorphisme :
</para>
<itemizedlist>
@@ -40,26 +42,26 @@
</itemizedlist>
<para>
- 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
+ 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).
+ 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).
</para>
<para>
- 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
+ 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
+ L'ordre à l'intérieur d'un simple fichier de mapping impose encore de définir les classes mères
avant les classes filles.
</para>
@@ -72,12 +74,12 @@
<sect2 id="inheritance-tableperclass" >
- <title>Une table par hi�rarchie de classe</title>
+ <title>Une table par hiérarchie de classe</title>
<para>
- Supposons que nous ayons une interface <literal>Payment</literal>, impl�ment�e
+ 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 :
+ <literal>ChequePayment</literal>. La stratégie une table par hiérarchie serait :
</para>
<programlisting><![CDATA[<class name="Payment" table="PAYMENT">
@@ -101,7 +103,7 @@
<para>
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>,
+ 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>.
</para>
@@ -111,7 +113,7 @@
<title>Une table par classe fille</title>
<para>
- La strat�gie une table par classe fille serait :
+ La stratégie une table par classe fille serait :
</para>
<programlisting><![CDATA[<class name="Payment" table="PAYMENT">
@@ -137,7 +139,7 @@
<para>
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
+ une clé primaire associée à la table classe mère (le modèle relationnel
est une association un-vers-un).
</para>
@@ -147,14 +149,14 @@
<title>Une table par classe fille, en utilisant un discriminant</title>
<para>
- 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
+ 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
+ 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 :
</para>
@@ -188,17 +190,17 @@
</class>]]></programlisting>
<para>
- 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.
+ 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.
</para>
</sect2>
<sect2 id="inheritance-mixing-tableperclass-tablepersubclass">
- <title>M�lange d'une table par hi�rarchie de classe avec une table par classe fille</title>
+ <title>Mélange d'une table par hiérarchie de classe avec une table par classe fille</title>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[<class name="Payment" table="PAYMENT">
@@ -223,8 +225,8 @@
</class>]]></programlisting>
<para>
- 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>.
+ 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>.
</para>
<programlisting><![CDATA[<many-to-one name="payment" column="PAYMENT_ID" class="Payment"/>]]></programlisting>
@@ -232,10 +234,10 @@
</sect2>
<sect2 id="inheritance-tableperconcrete" revision="2">
- <title>Une table par classe concr�te</title>
+ <title>Une table par classe concrète</title>
<para>
- Il y a deux mani�res d'utiliser la strat�gie d'une table par classe concr�te. La premi�re
+ 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>.
</para>
@@ -258,30 +260,30 @@
</class>]]></programlisting>
<para>
- 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.
+ 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.
</para>
<para>
- 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
+ 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
+ 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.
+ doit être partagée par toutes les classes filles "union" d'une hiérarchie.
</para>
<para>
- 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,
+ 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.
+ de la classe mère.
</para>
</sect2>
<sect2 id="inheritance-tableperconcreate-polymorphism">
- <title>Une table par classe concr�te, en utilisant le polymorphisme implicite</title>
+ <title>Une table par classe concrète, en utilisant le polymorphisme implicite</title>
<para>
Une approche alternative est l'emploi du polymorphisme implicite :
@@ -313,20 +315,20 @@
<para>
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).
+ 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).
</para>
<para>
- 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.
+ 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.
</para>
<para>
- Pour cette strat�gie de mapping, une association polymorphique pour <literal>Payment</literal>
- est habituellement mapp�e en utilisant <literal><any></literal>.
+ Pour cette stratégie de mapping, une association polymorphique pour <literal>Payment</literal>
+ est habituellement mappée en utilisant <literal><any></literal>.
</para>
<programlisting><![CDATA[<any name="payment" meta-type="string" id-type="long">
@@ -340,14 +342,14 @@
</sect2>
<sect2 id="inheritace-mixingpolymorphism">
- <title>M�lange du polymorphisme implicite avec d'autres mappings d'h�ritage</title>
+ <title>Mélange du polymorphisme implicite avec d'autres mappings d'héritage</title>
<para>
- 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
+ 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>).
+ 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>).
</para>
<programlisting><![CDATA[<class name="CreditCardPayment" table="CREDIT_PAYMENT">
@@ -380,10 +382,10 @@
<para>
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
+ 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>),
+ (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>.
</para>
@@ -396,17 +398,17 @@
<title>Limitations</title>
<para>
- 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>.
+ 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>.
</para>
<para>
- La table suivante montre les limitations des mappings d'une table par classe concr�te, et du polymorphisme implicite, dans Hibernate.
+ La table suivante montre les limitations des mappings d'une table par classe concrète, et du polymorphisme implicite, dans Hibernate.
</para>
<table frame="topbot">
- <title>Caract�ristiques du mapping d'h�ritage</title>
+ <title>Caractéristiques du mapping d'héritage</title>
<tgroup cols='8' align='left' colsep='1' rowsep='1'>
<colspec colname='c1' colwidth="1*"/>
<colspec colname='c2' colwidth="1*"/>
@@ -418,20 +420,20 @@
<colspec colname='c8' colwidth="1*"/>
<thead>
<row>
- <entry>Strat�gie d'h�ritage</entry>
+ <entry>Stratégie d'héritage</entry>
<entry>many-to-one polymorphique</entry>
<entry>one-to-one polymorphique</entry>
<entry>one-to-many polymorphique</entry>
<entry>many-to-many polymorphique</entry>
<entry><literal>load()/get()</literal> polymorphique</entry>
- <entry>Requ�tes polymorphiques</entry>
+ <entry>Requêtes polymorphiques</entry>
<entry>Jointures polymorphiques</entry>
- <entry>R�cup�ration par jointure externe</entry>
+ <entry>Récupération par jointure externe</entry>
</row>
</thead>
<tbody>
<row>
- <entry>une table par hi�rarchie de classe</entry>
+ <entry>une table par hiérarchie de classe</entry>
<entry><literal><many-to-one></literal></entry>
<entry><literal><one-to-one></literal></entry>
<entry><literal><one-to-many></literal></entry>
@@ -439,7 +441,7 @@
<entry><literal>s.get(Payment.class, id)</literal></entry>
<entry><literal>from Payment p</literal></entry>
<entry><literal>from Order o join o.payment p</literal></entry>
- <entry><emphasis>support�e</emphasis></entry>
+ <entry><emphasis>supportée</emphasis></entry>
</row>
<row>
<entry>une table par classe fille</entry>
@@ -450,10 +452,10 @@
<entry><literal>s.get(Payment.class, id)</literal></entry>
<entry><literal>from Payment p</literal></entry>
<entry><literal>from Order o join o.payment p</literal></entry>
- <entry><emphasis>support�e</emphasis></entry>
+ <entry><emphasis>supportée</emphasis></entry>
</row>
<row>
- <entry>une table par classe concr�te (union-subclass)</entry>
+ <entry>une table par classe concrète (union-subclass)</entry>
<entry><literal><many-to-one></literal></entry>
<entry><literal><one-to-one></literal></entry>
<entry><literal><one-to-many></literal> (pour <literal>inverse="true"</literal> seulement)</entry>
@@ -461,18 +463,18 @@
<entry><literal>s.get(Payment.class, id)</literal></entry>
<entry><literal>from Payment p</literal></entry>
<entry><literal>from Order o join o.payment p</literal></entry>
- <entry><emphasis>support�e</emphasis></entry>
+ <entry><emphasis>supportée</emphasis></entry>
</row>
<row>
- <entry>une table par classe concr�te (polymorphisme implicite)</entry>
+ <entry>une table par classe concrète (polymorphisme implicite)</entry>
<entry><literal><any></literal></entry>
- <entry><emphasis>non support�</emphasis></entry>
- <entry><emphasis>non support�</emphasis></entry>
+ <entry><emphasis>non supporté</emphasis></entry>
+ <entry><emphasis>non supporté</emphasis></entry>
<entry><literal><many-to-any></literal></entry>
<entry><literal>s.createCriteria(Payment.class).add( Restrictions.idEq(id) ).uniqueResult()</literal></entry>
<entry><literal>from Payment p</literal></entry>
- <entry><emphasis>non support�es</emphasis></entry>
- <entry><emphasis>non support�e</emphasis></entry>
+ <entry><emphasis>non supportées</emphasis></entry>
+ <entry><emphasis>non supportée</emphasis></entry>
</row>
</tbody>
</tgroup>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/performance.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/performance.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/performance.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,143 +1,145 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="performance">
- <title>Am�liorer les performances</title>
+ <title>Améliorer les performances</title>
<sect1 id="performance-fetching" revision="2">
- <title>Strat�gies de chargement</title>
+ <title>Stratégies de chargement</title>
<para>
- 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 �
+ 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.
+ 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.
</para>
<para>
- Hibernate3 d�finit les strat�gies de chargement suivantes :
+ Hibernate3 définit les stratégies de chargement suivantes :
</para>
<itemizedlist>
<listitem>
<para>
- <emphasis>Chargement par jointure</emphasis> - Hibernate r�cup�re
- l'instance associ�e ou la collection dans un m�me <literal>SELECT</literal>,
+ <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>.
</para>
</listitem>
<listitem>
<para>
<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.
+ 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.
</para>
</listitem>
<listitem>
<para>
<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.
+ 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.
</para>
</listitem>
<listitem>
<para>
- <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.
+ <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.
</para>
</listitem>
</itemizedlist>
<para>
- Hibernate fait �galement la distinction entre :
+ Hibernate fait également la distinction entre :
</para>
<itemizedlist>
<listitem>
<para>
- <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�.
+ <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é.
</para>
</listitem>
<listitem>
<para>
<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).
+ 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).
</para>
</listitem>
<listitem>
<para>
<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).
+ é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).
</para>
</listitem>
<listitem>
<para>
<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�.
+ objet est chargée lorsqu'une méthode autre que le getter sur l'identifiant est
+ appelée sur l'objet associé.
</para>
</listitem>
<listitem>
<para>
<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
+ 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.
+ à la compilation et est rarement nécessaire.
</para>
</listitem>
<listitem>
<para>
<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.
+ 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.
</para>
</listitem>
</itemizedlist>
<para>
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.
+ 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.
</para>
<sect2 id="performance-fetching-lazy">
- <title>Travailler avec des associations charg�es tardivement</title>
+ <title>Travailler avec des associations chargées tardivement</title>
<para>
- Par d�faut, Hibernate3 utilise le chargement tardif par select pour les collections
+ 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
+ Ces valeurs par défaut sont valables pour la plupart des associations dans la
plupart des applications.
</para>
<para>
- <emphasis>Note :</emphasis> si vous d�finissez
+ <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).
+ être activée à un niveau de granularité plus fin).
</para>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[s = sessions.openSession();
@@ -153,38 +155,38 @@
Integer accessLevel = (Integer) permissions.get("accounts"); // Error!]]></programlisting>
<para>
- 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
+ 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.
+ 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.
</para>
<para>
Une autre alternative est d'utiliser une collection ou une association non
- "tardive" en sp�cifiant <literal>lazy="false"</literal> dans le mapping de
+ "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 !
+ 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 !
</para>
<para>
- 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
+ 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.
</para>
</sect2>
<sect2 id="performance-fetching-custom" revision="4">
- <title>Personnalisation des strat�gies de chargement</title>
+ <title>Personnalisation des stratégies de chargement</title>
<para>
- Le chargement par select (mode par d�faut) est tr�s vuln�rable au probl�me du
+ 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 :
</para>
@@ -198,53 +200,53 @@
<programlisting><![CDATA[<many-to-one name="mother" class="Cat" fetch="join"/>]]></programlisting>
<para>
- La strat�gie de chargement d�finie � l'aide du mot <literal>fetch</literal> dans les fichiers
+ La stratégie de chargement définie à l'aide du mot <literal>fetch</literal> dans les fichiers
de mapping affecte :
</para>
<itemizedlist>
<listitem>
<para>
- La r�cup�ration via <literal>get()</literal> ou <literal>load()</literal>
+ La récupération via <literal>get()</literal> ou <literal>load()</literal>
</para>
</listitem>
<listitem>
<para>
- La r�cup�ration implicite lorsque l'on navigue � travers une association
+ La récupération implicite lorsque l'on navigue à travers une association
</para>
</listitem>
<listitem>
<para>
- Les requ�tes de type <literal>Criteria</literal>
+ Les requêtes de type <literal>Criteria</literal>
</para>
</listitem>
<listitem>
<para>
- Les requ�tes HQL si l'on utilise le chargement par <literal>subselect</literal>
+ Les requêtes HQL si l'on utilise le chargement par <literal>subselect</literal>
</para>
</listitem>
</itemizedlist>
<para>
- 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.
+ 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.
</para>
<para>
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
+ 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>
</para>
<para>
- Si vous ne vous sentez pas pr�t � modifier la strat�gie de chargement utilis�
+ 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 :
+ utiliser une requête de type <literal>Criteria</literal> comme par exemple :
</para>
<programlisting><![CDATA[User user = (User) session.createCriteria(User.class)
@@ -253,12 +255,12 @@
.uniqueResult();]]></programlisting>
<para>
- (Il s'agit de l'�quivalent pour Hibernate de ce que d'autres outils de mapping
+ (Il s'agit de l'équivalent pour Hibernate de ce que d'autres outils de mapping
appellent un "fetch plan" ou "plan de chargement")
</para>
<para>
- Une autre mani�re compl�tement diff�rente d'�viter le probl�me des N+1 selects
+ 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.
</para>
@@ -268,34 +270,34 @@
<title>Proxys pour des associations vers un seul objet</title>
<para>
- 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
+ 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).
</para>
<para>
- Par d�faut, Hibernate g�n�re des proxys (au d�marrage) pour toutes les classes
+ 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>.
</para>
<para>
- 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>
+ 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>
</para>
<para>
- Il y a quelques pr�cautions � prendre lorsque l'on �tend cette approche � des classes
+ Il y a quelques précautions à prendre lorsque l'on étend cette approche à des classes
polymorphiques, exemple :
</para>
@@ -307,19 +309,19 @@
</class>]]></programlisting>
<para>
- 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
+ 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> :
</para>
- <programlisting><![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instancie un proxy (n'interroge pas la base de donn�es)
-if ( cat.isDomesticCat() ) { // interroge la base de donn�es pour initialiser le proxy
+ <programlisting><![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instancie un proxy (n'interroge pas la base de données)
+if ( cat.isDomesticCat() ) { // interroge la base de données pour initialiser le proxy
DomesticCat dc = (DomesticCat) cat; // Erreur !
....
}]]></programlisting>
<para>
- Deuxi�mement, il est possible de casser la notion d'<literal>==</literal> des proxy.
+ Deuxièmement, il est possible de casser la notion d'<literal>==</literal> des proxy.
</para>
<programlisting><![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instancie un proxy Cat
@@ -328,29 +330,29 @@
System.out.println(cat==dc); // faux]]></programlisting>
<para>
- 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 :
+ 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 :
</para>
- <programlisting><![CDATA[cat.setWeight(11.0); // interroge la base de donn�es pour initialiser le proxy
+ <programlisting><![CDATA[cat.setWeight(11.0); // interroge la base de données pour initialiser le proxy
System.out.println( dc.getWeight() ); // 11.0]]></programlisting>
<para>
- 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>.
+ 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>.
</para>
<para>
- 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
+ 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.
</para>
<para>
- 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
+ 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 :
</para>
@@ -362,10 +364,10 @@
</class>]]></programlisting>
<para>
- 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).
+ 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).
</para>
<programlisting><![CDATA[Cat cat = (Cat) session.load(CatImpl.class, catid);
@@ -373,13 +375,13 @@
Cat fritz = (Cat) iter.next();]]></programlisting>
<para>
- Les relations sont aussi initialis�es tardivement. Ceci signifie que vous
- devez d�clarer chaque propri�t� comme �tant de type <literal>Cat</literal>,
+ 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>.
</para>
<para>
- Certaines op�rations ne n�cessitent pas l'initialisation du proxy
+ Certaines opérations ne nécessitent pas l'initialisation du proxy
</para>
<itemizedlist spacing="compact">
@@ -403,15 +405,15 @@
</itemizedlist>
<para>
- Hibernate d�tectera les classes qui surchargent <literal>equals()</literal> ou
+ Hibernate détectera les classes qui surchargent <literal>equals()</literal> ou
<literal>hashCode()</literal>.
</para>
<para>
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.
+ 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.
</para>
</sect2>
@@ -420,94 +422,94 @@
<title>Initialisation des collections et des proxys</title>
<para>
- 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".
+ 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".
</para>
<para>
- 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
+ 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.
+ Mais ceci n'est pas très lisible pour les personnes parcourant le code et n'est pas très générique.
</para>
<para>
- 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.
+ 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.
+ a le même effet sur la collection kittens.
</para>
<para>
- 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
+ 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 :
+ est initialisée. Il y a deux moyens de traiter ce problème :
</para>
<itemizedlist>
<listitem>
<para>
- 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
+ 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
+ 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.
+ 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".
</para>
</listitem>
<listitem>
<para>
- 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>.
+ 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>.
</para>
</listitem>
<listitem>
<para>
- 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
+ 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.
+ une sémantique transactionnelle ad hoc.
</para>
</listitem>
</itemizedlist>
<para>
- 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
+ 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
</para>
<para>
- Vous pouvez utiliser un filtre de collection pour r�cup�rer sa taille sans l'initialiser :
+ Vous pouvez utiliser un filtre de collection pour récupérer sa taille sans l'initialiser :
</para>
<programlisting><![CDATA[( (Integer) s.createFilter( collection, "select count(*)" ).list().get(0) ).intValue()]]></programlisting>
<para>
- 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
+ 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.
</para>
@@ -520,40 +522,40 @@
<title>Utiliser le chargement par lot</title>
<para>
- 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
+ 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.
</para>
<para>
- 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
+ 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> :
</para>
<programlisting><![CDATA[<class name="Person" batch-size="10">...</class>]]></programlisting>
<para>
- Hibernate ex�cutera d�sormais trois requ�tes, en chargeant respectivement 10,
- 10, et 5 entit�s.
+ Hibernate exécutera désormais trois requêtes, en chargeant respectivement 10,
+ 10, et 5 entités.
</para>
<para>
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,
+ 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 :
+ précharger les collections :
</para>
<programlisting><![CDATA[<class name="Person">
@@ -565,15 +567,15 @@
<para>
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.
+ Encore une fois, la valeur de l'attribut dépend du nombre de collections
+ non initialisées dans une <literal>Session</literal> particulière.
</para>
<para>
- 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
+ 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.)
</para>
@@ -583,9 +585,9 @@
<title>Utilisation du chargement par sous select</title>
<para>
- 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.
+ 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.
</para>
<!-- TODO: Write more about this -->
@@ -593,21 +595,21 @@
</sect2>
<sect2 id="performance-fetching-lazyproperties">
- <title>Utiliser le chargement tardif des propri�t�s</title>
+ <title>Utiliser le chargement tardif des propriétés</title>
<para>
- 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
+ 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�.
+ 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é.
</para>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[<class name="Document">
@@ -620,13 +622,13 @@
</class>]]></programlisting>
<para>
- 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.
+ 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.
</para>
<para>
- Pour l'instrumentation du bytecode vous pouvez utiliser la t�che Ant suivante :
+ Pour l'instrumentation du bytecode vous pouvez utiliser la tâche Ant suivante :
</para>
<programlisting><![CDATA[<target name="instrument" depends="compile">
@@ -644,16 +646,16 @@
</target>]]></programlisting>
<para>
- 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.
+ 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.
</para>
<para>
- Vous pouvez forcer le mode de chargement agressif des propri�t�s en utilisant
- <literal>fetch all properties</literal> dans les requ�ts HQL.
+ Vous pouvez forcer le mode de chargement agressif des propriétés en utilisant
+ <literal>fetch all properties</literal> dans les requêts HQL.
</para>
</sect2>
@@ -664,21 +666,21 @@
<para>
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�.
+ 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).
+ 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).
</para>
<para>
- 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>.
+ 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>.
</para>
<table frame="topbot" id="cacheproviders" revision="1">
@@ -695,28 +697,28 @@
<entry>Classe pourvoyeuse</entry>
<entry>Type</entry>
<entry>Support en Cluster</entry>
- <entry>Cache de requ�tes support�</entry>
+ <entry>Cache de requêtes supporté</entry>
</row>
</thead>
<tbody>
<row>
<entry>Hashtable (ne pas utiliser en production)</entry>
<entry><literal>org.hibernate.cache.HashtableCacheProvider</literal></entry>
- <entry>m�moire</entry>
+ <entry>mémoire</entry>
<entry></entry>
<entry>oui</entry>
</row>
<row>
<entry>EHCache</entry>
<entry><literal>org.hibernate.cache.EhCacheProvider</literal></entry>
- <entry>m�moire, disque</entry>
+ <entry>mémoire, disque</entry>
<entry></entry>
<entry>oui</entry>
</row>
<row>
<entry>OSCache</entry>
<entry><literal>org.hibernate.cache.OSCacheProvider</literal></entry>
- <entry>m�moire, disque</entry>
+ <entry>mémoire, disque</entry>
<entry>oui (invalidation de cluster)</entry>
<entry>oui</entry>
</row>
@@ -732,7 +734,7 @@
<entry><literal>org.hibernate.cache.TreeCacheProvider</literal></entry>
<entry>en cluster (multicast ip), transactionnel</entry>
<entry>oui (replication)</entry>
- <entry>oui (horloge sync. n�cessaire)</entry>
+ <entry>oui (horloge sync. nécessaire)</entry>
</row>
</tbody>
</tgroup>
@@ -742,7 +744,7 @@
<title>Mapping de Cache</title>
<para>
- L'�l�ment <literal><cache></literal> d'une classe ou d'une collection �
+ L'élément <literal><cache></literal> d'une classe ou d'une collection à
la forme suivante :
</para>
@@ -760,39 +762,39 @@
<calloutlist>
<callout arearefs="cache1">
<para>
- <literal>usage</literal> (requis) sp�cifie la strat�gie de cache :
+ <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-écriture</literal>,
+ <literal>lecture-écriture non stricte</literal> ou
<literal>lecture seule</literal>
</para>
</callout>
<callout arearefs="cache2">
<para>
- <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
+ <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
</para>
</callout>
<callout arearefs="cache3">
<para>
- <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�.
+ <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é.
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- Alternativement (voir pr�f�rentiellement), vous pouvez sp�cifier les �l�ments
+ 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>.
</para>
<para>
- L'attribut <literal>usage</literal> sp�cifie une <emphasis>strat�gie de concurrence d'acc�s au cache</emphasis>.
+ L'attribut <literal>usage</literal> spécifie une <emphasis>stratégie de concurrence d'accès au cache</emphasis>.
</para>
</sect2>
@@ -802,8 +804,8 @@
<para>
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.
+ 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.
</para>
<programlisting><![CDATA[<class name="eg.Immutable" mutable="false">
@@ -815,19 +817,19 @@
<sect2 id="performance-cache-readwrite">
- <title>Strat�gie : lecture/�criture</title>
+ <title>Stratégie : lecture/écriture</title>
<para>
- 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
+ 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.
+ 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.
</para>
<programlisting><![CDATA[<class name="eg.Cat" .... >
@@ -842,40 +844,40 @@
</sect2>
<sect2 id="performance-cache-nonstrict">
- <title>Strat�gie : lecture/�criture non stricte</title>
+ <title>Stratégie : lecture/écriture non stricte</title>
<para>
- 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
+ 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
+ environnements, vous devriez vous assurer que la transation est terminée à l'appel
de <literal>Session.close()</literal> ou <literal>Session.disconnect()</literal>
</para>
</sect2>
<sect2 id="performance-cache-transactional">
- <title>Strat�gie : transactionelle</title>
+ <title>Stratégie : transactionelle</title>
<para>
- 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
+ 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>.
</para>
</sect2>
<para>
- 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.
+ 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.
</para>
<table frame="topbot">
- <title>Strat�gie de concurrence du cache</title>
+ <title>Stratégie de concurrence du cache</title>
<tgroup cols='5' align='left' colsep='1' rowsep='1'>
<colspec colname='c1' colwidth="1*"/>
<colspec colname='c2' colwidth="1*"/>
@@ -886,8 +888,8 @@
<row>
<entry>Cache</entry>
<entry>read-only (lecture seule)</entry>
- <entry>nonstrict-read-write (lecture-�criture non stricte)</entry>
- <entry>read-write (lecture-�riture)</entry>
+ <entry>nonstrict-read-write (lecture-écriture non stricte)</entry>
+ <entry>read-write (lecture-ériture)</entry>
<entry>transactional (transactionnel)</entry>
</row>
</thead>
@@ -934,21 +936,21 @@
</sect1>
<sect1 id="performance-sessioncache" revision="2">
- <title>G�rer les caches</title>
+ <title>Gérer les caches</title>
<para>
- 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>,
+ 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>.
+ cet objet est ajouté au cache interne de la <literal>Session</literal>.
</para>
<para>
- 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
+ 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
</para>
<programlisting><![CDATA[ScrollableResult cats = sess.createQuery("from Cat as cat").scroll(); //a huge result set
@@ -959,7 +961,7 @@
}]]></programlisting>
<para>
- La <literal>Session</literal> dispose aussi de la m�thode <literal>contains()</literal> pour d�terminer
+ 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.
</para>
@@ -968,10 +970,10 @@
</para>
<para>
- Pour le cache de second niveau, il existe des m�thodes d�finies dans
+ 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.
+ la classe entière, une instance de collection ou
+ le rôle entier d'une collection.
</para>
<programlisting><![CDATA[sessionFactory.evict(Cat.class, catId); //evict a particular Cat
@@ -980,39 +982,39 @@
sessionFactory.evictCollection("Cat.kittens"); //evict all kitten collections]]></programlisting>
<para>
- Le <literal>CacheMode</literal> contr�le comme une session particuli�re interragit avec le
+ Le <literal>CacheMode</literal> contrôle comme une session particulière interragit avec le
cache de second niveau
</para>
<itemizedlist>
<listitem>
<para>
- <literal>CacheMode.NORMAL</literal> - lit et �crit les items dans le cache de second niveau
+ <literal>CacheMode.NORMAL</literal> - lit et écrit les items dans le cache de second niveau
</para>
</listitem>
<listitem>
<para>
<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
+ les écrit pas sauf dans le cache d'une mise à jour d'une donnée
</para>
</listitem>
<listitem>
<para>
- <literal>CacheMode.PUT</literal> - �crit les items dans le cache de second niveau mais ne les
+ <literal>CacheMode.PUT</literal> - écrit les items dans le cache de second niveau mais ne les
lit pas dans le cache de second niveau
</para>
</listitem>
<listitem>
<para>
- <literal>CacheMode.REFRESH</literal> - �crit les items dans le cache de second niveau mais ne les
+ <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
+ en forçant un rafraîchissement du cache de second niveau pour chaque item lu dans la base
</para>
</listitem>
</itemizedlist>
<para>
- Pour parcourir le contenu du cache de second niveau ou la r�gion du cache d�di�e au requ�tes, vous
+ 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:
</para>
@@ -1022,8 +1024,8 @@
.getEntries();]]></programlisting>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[hibernate.generate_statistics true
@@ -1032,37 +1034,37 @@
</sect1>
<sect1 id="performance-querycache" revision="1">
- <title>Le cache de requ�tes</title>
+ <title>Le cache de requêtes</title>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[hibernate.cache.use_query_cache true]]></programlisting>
<para>
- 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
+ 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.
+ de requête doit toujours être utilisé avec le cache de second niveau pour être efficace.
</para>
<para>
- 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,
+ 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.
+ 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.
</para>
<para>
- 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
+ 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>.
</para>
@@ -1074,12 +1076,12 @@
.list();]]></programlisting>
<para>
- 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
+ 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>.
</para>
@@ -1088,15 +1090,15 @@
<title>Comprendre les performances des Collections</title>
<para>
- Nous avons d�j� pass� du temps � discuter des collections.
+ Nous avons déjà passé du temps à discuter des collections.
Dans cette section, nous allons traiter du comportement des
- collections � l'ex�cution.
+ collections à l'exécution.
</para>
<sect2 id="performance-collections-taxonomy">
<title>Classification</title>
- <para>Hibernate d�finit trois types de collections :</para>
+ <para>Hibernate définit trois types de collections :</para>
<itemizedlist>
<listitem>
@@ -1111,17 +1113,17 @@
</itemizedlist>
<para>
- 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 :
+ 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 :
</para>
<itemizedlist>
<listitem>
- <para>collections index�es</para>
+ <para>collections indexées</para>
</listitem>
<listitem>
<para>sets</para>
@@ -1132,46 +1134,46 @@
</itemizedlist>
<para>
- 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.
+ 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.
</para>
<para>
- 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
+ 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
+ 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>).
+ (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>).
</para>
<para>
- 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
+ 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
</para>
<para>
- 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.
+ 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.
</para>
<para>
- 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
+ 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).
</para>
@@ -1179,39 +1181,39 @@
</sect2>
<sect2 id="performance-collections-mostefficientupdate">
- <title>Les lists, les maps, les idbags et les sets sont les collections les plus efficaces pour la mise � jour</title>
+ <title>Les lists, les maps, les idbags et les sets sont les collections les plus efficaces pour la mise à jour</title>
<para>
- 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.
+ 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.
</para>
<para>
- Il existe un autre avantage qu'ont les collections index�es sur les Sets
+ 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>
+ 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.
</para>
<para>
- Apr�s s'�tre rappel� que les tableaux ne peuvent pas �tre charg�s tardivement,
+ 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.
+ (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
+ est du au fait que la sémantique des "set" est la plus naturelle dans le modèle
relationnel.
</para>
<para>
- Cependant, dans des mod�les objet bien con�us avec Hibernate, on voit souvent que
+ 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�.
+ <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à.
</para>
</sect2>
@@ -1220,11 +1222,11 @@
<title>Les Bags et les lists sont les plus efficaces pour les collections inverse</title>
<para>
- 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
+ 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!
+ 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>).
@@ -1243,49 +1245,49 @@
<title>Suppression en un coup</title>
<para>
- Parfois, effacer les �l�ments d'une collection un par un peut �tre extr�mement inefficace.
+ 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).
+ 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 !
</para>
<para>
- 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
+ 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.
</para>
<para>
- 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.
+ 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.
</para>
<itemizedlist>
<listitem>
- <para>effacer dix huit enregistrements un � un puis en ins�rer trois</para>
+ <para>effacer dix huit enregistrements un à un puis en insérer trois</para>
</listitem>
<listitem>
- <para>effacer la totalit� de la collection (en un <literal>DELETE</literal> SQL) puis ins�rer
- les cinq �l�ments restant un � un</para>
+ <para>effacer la totalité de la collection (en un <literal>DELETE</literal> SQL) puis insérer
+ les cinq éléments restant un à un</para>
</listitem>
</itemizedlist>
<para>
- 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...).
+ 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...).
</para>
<para>
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.
+ (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.
</para>
<para>
- Bien s�r, la suppression en un coup ne s'applique pas pour les collections qui sont mapp�es
+ Bien sûr, la suppression en un coup ne s'applique pas pour les collections qui sont mappées
avec <literal>inverse="true"</literal>.
</para>
</sect2>
@@ -1296,8 +1298,8 @@
<title>Moniteur de performance</title>
<para>
- 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.
+ 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>.
</para>
@@ -1305,13 +1307,13 @@
<title>Suivi d'une SessionFactory</title>
<para>
- 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.
+ 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.
</para>
<para>
- Hibernate peut �galement utiliser JMX pour publier les m�triques si vous activez
+ 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 :
@@ -1338,81 +1340,81 @@
server.registerMBean(stats, on); // Register the MBean on the server]]></programlisting>
<para>
- TODO: Cela n'a pas de sens : dans le premier cs on r�cup�re et on utilise le MBean directement.
+ 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>
</para>
<para>
- Vous pouvez (d�s)activer le suivi pour une <literal>SessionFactory</literal>
+ Vous pouvez (dés)activer le suivi pour une <literal>SessionFactory</literal>
</para>
<itemizedlist>
<listitem>
<para>
- au moment de la configuration en mettant <literal>hibernate.generate_statistics</literal> � <literal>false</literal>
+ au moment de la configuration en mettant <literal>hibernate.generate_statistics</literal> à <literal>false</literal>
</para>
</listitem>
</itemizedlist>
<itemizedlist>
<listitem>
<para>
- � chaud avec <literal>sf.getStatistics().setStatisticsEnabled(true)</literal>
+ à chaud avec <literal>sf.getStatistics().setStatisticsEnabled(true)</literal>
ou <literal>hibernateStatsBean.setStatisticsEnabled(true)</literal>
</para>
</listitem>
</itemizedlist>
<para>
- Les statistiques peuvent �tre remises � z�ro de mani�re programmatique � l'aide de la m�thode
+ 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>
+ Un résumé peut être envoyé à un logger (niveau info) à l'aide de la méthode <literal>logSummary()</literal>
</para>
</sect2>
<sect2 id="performance-monitoring-metrics" revision="1">
- <title>M�triques</title>
+ <title>Métriques</title>
<para>
- 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 :
+ 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 :
</para>
<itemizedlist>
<listitem>
<para>
- 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...
+ 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...
</para>
</listitem>
<listitem>
<para>
- Les m�triques relatives aux entit�s, collections, requ�tes et caches dans
- leur ensemble (m�triques globales),
+ Les métriques relatives aux entités, collections, requêtes et caches dans
+ leur ensemble (métriques globales),
</para>
</listitem>
<listitem>
<para>
- Les m�triques d�taill�es relatives � une entit�, une collection, une requ�te
- ou une r�gion de cache particuli�re.
+ Les métriques détaillées relatives à une entité, une collection, une requête
+ ou une région de cache particulière.
</para>
</listitem>
</itemizedlist>
<para>
- 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.
+ 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.
</para>
<para>
- 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
+ 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
@@ -1437,9 +1439,9 @@
log.info(Cat.class.getName() + " changed " + changes + "times" );]]></programlisting>
<para>
- 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>,
+ 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>.
</para>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/persistent_classes.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/persistent_classes.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/persistent_classes.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,20 +1,22 @@
-<?xml version='1.0' encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="persistent-classes" revision="2">
<title>Classes persistantes</title>
<para>
- 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.
+ 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.
</para>
<para>
- 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
+ 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.
</para>
@@ -22,8 +24,8 @@
<title>Un exemple simple de POJO</title>
<para>
- Toute bonne application Java n�cessite une classe persistante
- repr�sentant les f�lins.
+ Toute bonne application Java nécessite une classe persistante
+ représentant les félins.
</para>
<programlisting><![CDATA[package eg;
@@ -106,49 +108,49 @@
}]]></programlisting>
<para>
- Il y a quatre r�gles � suivre ici :
+ Il y a quatre règles à suivre ici :
</para>
<sect2 id="persistent-classes-pojo-constructor" revision="1">
- <title>Impl�menter un constructeur sans argument</title>
+ <title>Implémenter un constructeur sans argument</title>
<para>
<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.
+ 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.
</para>
</sect2>
<sect2 id="persistent-classes-pojo-identifier" revision="2">
- <title>Fournir une propri�t� d'indentifiant (optionnel)</title>
+ <title>Fournir une propriété d'indentifiant (optionnel)</title>
<para>
- <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"
+ <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).
+ (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).
</para>
<para>
- La propri�t� d'identifiant est strictement optionnelle. Vous pouver l'oublier et laisser Hibernate
+ 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.
</para>
<para>
- En fait, quelques fonctionnalit�s ne sont disponibles que pour les classes
- d�clarant un identifiant de propri�t� :
+ En fait, quelques fonctionnalités ne sont disponibles que pour les classes
+ déclarant un identifiant de propriété :
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- Les r�attachements transitifs pour les objets d�tach�s (mise � jour en cascade ou fusion en cascade) -
+ Les réattachements transitifs pour les objets détachés (mise à jour en cascade ou fusion en cascade) -
voir <xref linkend="objectstate-transitive"/>
</para>
</listitem>
@@ -165,8 +167,8 @@
</itemizedlist>
<para>
- 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
+ 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).
</para>
</sect2>
@@ -174,39 +176,39 @@
<sect2 id="persistent-classes-pojo-final">
<title>Favoriser les classes non finales (optionnel)</title>
<para>
- 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.
+ 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.
</para>
<para>
- 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.
+ 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.
</para>
<para>
- 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
+ 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>.
</para>
</sect2>
<sect2 id="persistent-classes-pojo-accessors" revision="2">
- <title>D�clarer les accesseurs et mutateurs des attributs persistants (optionnel)</title>
+ <title>Déclarer les accesseurs et mutateurs des attributs persistants (optionnel)</title>
<para>
- <literal>Cat</literal> d�clare des mutateurs pour toutes ses champs persistants. Beaucoup d'autres
+ <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>
+ 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.
+ <literal>setFoo</literal>. Nous pouvons changer pour un accès direct aux champs pour des propriétés particulières, si besoin est.
</para>
<para>
- 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>
+ 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>.
</para>
@@ -215,11 +217,11 @@
</sect1>
<sect1 id="persistent-classes-inheritance">
- <title>Impl�menter l'h�ritage</title>
+ <title>Implémenter l'héritage</title>
<para>
- 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>.
+ 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>.
</para>
<programlisting><![CDATA[package eg;
@@ -237,55 +239,55 @@
</sect1>
<sect1 id="persistent-classes-equalshashcode" revision="1">
- <title>Impl�menter <literal>equals()</literal> et <literal>hashCode()</literal></title>
+ <title>Implémenter <literal>equals()</literal> et <literal>hashCode()</literal></title>
<para>
- Vous devez surcharger les m�thodes <literal>equals()</literal> et
+ Vous devez surcharger les méthodes <literal>equals()</literal> et
<literal>hashCode()</literal> si vous
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
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)
+ (la manière recommandée pour représenter des associations pluri-valuées)
<emphasis>et</emphasis>
</para>
</listitem>
<listitem>
<para>
- avez l'intention d'utiliser le r�attachement d'instances d�tach�es
+ avez l'intention d'utiliser le réattachement d'instances détachées
</para>
</listitem>
</itemizedlist>
<para>
- 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.
+ 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.
</para>
<para>
- La mani�re la plus �vidente est d'impl�menter <literal>equals()</literal>/<literal>hashCode()</literal>
+ 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
+ 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�.
+ 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é.
</para>
<para>
- Nous recommandons donc d'impl�menter
+ 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
+ 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>) :
</para>
@@ -314,39 +316,39 @@
}]]></programlisting>
<para>
- 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.
+ 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.
</para>
</sect1>
<sect1 id="persistent-classes-dynamicmodels">
- <title>Mod�les dynamiques</title>
+ <title>Modèles dynamiques</title>
<para>
- <emphasis>Notez que la fonctionnalit�s suivantes sont actuellement consid�r�es
- comme exp�rimentales et peuvent changer dans un futur proche.</emphasis>
+ <emphasis>Notez que la fonctionnalités suivantes sont actuellement considérées
+ comme expérimentales et peuvent changer dans un futur proche.</emphasis>
</para>
<para>
- 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.
+ 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.
</para>
<para>
- 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>
+ 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"/>).
</para>
<para>
- 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�
+ 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 :
</para>
@@ -385,13 +387,13 @@
</hibernate-mapping>]]></programlisting>
<para>
- 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.
+ 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.
</para>
<para>
- 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
+ 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 :
</para>
@@ -419,15 +421,15 @@
<para>
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.
+ 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.
</para>
<para>
- Les modes de repr�sentation d'une entit� peut aussi �tre configur� par <literal>Session</literal> :
+ Les modes de représentation d'une entité peut aussi être configuré par <literal>Session</literal> :
</para>
<programlisting><![CDATA[Session dynamicSession = pojoSession.getSession(EntityMode.MAP);
@@ -445,17 +447,17 @@
<para>
- Veuillez noter que l'appel � <literal>getSession()</literal> en utilisant un
+ 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>
+ <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>
+ 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.
+ et de la connexion à l'unité de travail primaire.
</para>
<para>
- Plus d'informations � propos de la repr�sentation XML peuvent �tre trouv�es dans
+ Plus d'informations à propos de la représentation XML peuvent être trouvées dans
<xref linkend="xml"/>.
</para>
@@ -466,27 +468,27 @@
<para>
<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
+ 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 gestion des contrats mentionn�s ci-dessus pour les entit�s, alors que
+ sont responsables de la gestion des contrats mentionnés ci-dessus pour les entités, alors que
les <literal>ComponentTuplizer</literal>s s'occupent des composants.
</para>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[<hibernate-mapping>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/preface.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/preface.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/preface.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,5 +1,4 @@
-<?xml version='1.0'?>
-
+<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE preface PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<preface id="preface">
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/query_criteria.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/query_criteria.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/query_criteria.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,17 +1,19 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="querycriteria">
- <title>Requ�tes par crit�res</title>
+ <title>Requêtes par critères</title>
<para>
- Hibernate offre une API d'interrogation par crit�res intuitive et extensible.
+ Hibernate offre une API d'interrogation par critères intuitive et extensible.
</para>
<sect1 id="querycriteria-creating">
- <title>Cr�er une instance de <literal>Criteria</literal></title>
+ <title>Créer une instance de <literal>Criteria</literal></title>
<para>
- 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
+ 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>.
</para>
@@ -22,14 +24,14 @@
</sect1>
<sect1 id="querycriteria-narrowing">
- <title>Restriction du r�sultat</title>
+ <title>Restriction du résultat</title>
<para>
- Un criterion (crit�re de recherche) est une instance de l'interface
+ 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.
+ <literal>org.hibernate.criterion.Restrictions</literal> définit
+ des méthodes pour obtenir des types de <literal>Criterion</literal>
+ pré-définis.
</para>
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
@@ -38,7 +40,7 @@
.list();]]></programlisting>
<para>
- Les restrictions peuvent �tre goup�es de mani�re logique.
+ Les restrictions peuvent être goupées de manière logique.
</para>
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
@@ -60,8 +62,8 @@
.list();]]></programlisting>
<para>
- 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
+ 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.
</para>
@@ -70,13 +72,13 @@
.list();]]></programlisting>
<para>
- La zone <literal>{alias}</literal> sera remplac�e par l'alias de colonne de l'entit�
- que l'on souhaite int�rroger.
+ La zone <literal>{alias}</literal> sera remplacée par l'alias de colonne de l'entité
+ que l'on souhaite intérroger.
</para>
<para>
- 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>.
+ 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>.
</para>
<programlisting><![CDATA[
@@ -94,10 +96,10 @@
</sect1>
<sect1 id="querycriteria-ordering">
- <title>Trier les r�sultats</title>
+ <title>Trier les résultats</title>
<para>
- Vous pouvez trier les r�sultats en utilisant <literal>org.hibernate.criterion.Order</literal>.
+ Vous pouvez trier les résultats en utilisant <literal>org.hibernate.criterion.Order</literal>.
</para>
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
@@ -120,7 +122,7 @@
<title>Associations</title>
<para>
- Vous pouvez facilement sp�cifier des contraintes sur des entit�s li�es,
+ Vous pouvez facilement spécifier des contraintes sur des entités liées,
par des associations en utilisant <literal>createCriteria()</literal>.
</para>
@@ -132,7 +134,7 @@
<para>
Notez que la seconde <literal>createCriteria()</literal> retourne une nouvelle
- instance de <literal>Criteria</literal>, qui se rapporte aux �l�ments de la
+ instance de <literal>Criteria</literal>, qui se rapporte aux éléments de la
collection <literal>kittens</literal>.
</para>
@@ -147,14 +149,14 @@
.list();]]></programlisting>
<para>
- (<literal>createAlias()</literal> ne cr�e pas de nouvelle instance de
+ (<literal>createAlias()</literal> ne crée pas de nouvelle instance de
<literal>Criteria</literal>.)
</para>
<para>
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
+ 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>.
</para>
@@ -173,11 +175,11 @@
</sect1>
<sect1 id="querycriteria-dynamicfetching" revision="1">
- <title>Peuplement d'associations de mani�re dynamique</title>
+ <title>Peuplement d'associations de manière dynamique</title>
<para>
- 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).
+ 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.
</para>
@@ -189,18 +191,18 @@
.list();]]></programlisting>
<para>
- Cette requ�te recherchera <literal>mate</literal> et <literal>kittens</literal>
+ Cette requête recherchera <literal>mate</literal> et <literal>kittens</literal>
via les jointures externes. Voir <xref linkend="performance-fetching"/> pour plus d'informations.
</para>
</sect1>
<sect1 id="querycriteria-examples">
- <title>Requ�tes par l'exemple</title>
+ <title>Requêtes par l'exemple</title>
<para>
La classe <literal>org.hibernate.criterion.Example</literal> vous permet de
- construire un crit�re suivant une instance d'objet donn�e.
+ construire un critère suivant une instance d'objet donnée.
</para>
<programlisting><![CDATA[Cat cat = new Cat();
@@ -211,12 +213,12 @@
.list();]]></programlisting>
<para>
- Les propri�t�s de type version, identifiant et association sont ignor�es.
- Par d�faut, les valeurs null sont exclues.
+ Les propriétés de type version, identifiant et association sont ignorées.
+ Par défaut, les valeurs null sont exclues.
</para>
<para>
- Vous pouvez ajuster la strat�gie d'utilisation de valeurs de
+ Vous pouvez ajuster la stratégie d'utilisation de valeurs de
l'<literal>Exemple</literal>.
</para>
@@ -230,7 +232,7 @@
.list();]]></programlisting>
<para>
- Vous pouvez utiliser les "exemples" pour des crit�res sur les objets associ�s.
+ Vous pouvez utiliser les "exemples" pour des critères sur les objets associés.
</para>
<programlisting><![CDATA[List results = session.createCriteria(Cat.class)
@@ -242,11 +244,11 @@
</sect1>
<sect1 id="querycriteria-projection">
- <title>Projections, agr�gation et regroupement</title>
+ <title>Projections, agrégation et regroupement</title>
<para>
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>.
+ projection sur une requête en appelant <literal>setProjection()</literal>.
</para>
<programlisting><![CDATA[List results = session.createCriteria(Cat.class)
@@ -264,16 +266,16 @@
.list();]]></programlisting>
<para>
- 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
+ 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.
</para>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[List results = session.createCriteria(Cat.class)
@@ -287,9 +289,9 @@
.list();]]></programlisting>
<para>
- 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
+ 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 :
</para>
@@ -337,10 +339,10 @@
</sect1>
<sect1 id="querycriteria-detachedqueries">
- <title>Requ�tes et sous-requ�tes d�tach�es</title>
+ <title>Requêtes et sous-requêtes détachées</title>
<para>
- 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>
+ 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.
</para>
@@ -354,8 +356,8 @@
session.close();]]></programlisting>
<para>
- 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
+ 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>.
</para>
@@ -372,7 +374,7 @@
.list();]]></programlisting>
<para>
- M�me des requ�tes corr�l�es sont possibles :
+ Même des requêtes corrélées sont possibles :
</para>
<programlisting><![CDATA[DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, "cat2")
@@ -389,19 +391,19 @@
could also be explained. -->
<sect1 id="query-criteria-naturalid">
- <title>Requ�tes par identifiant naturel</title>
+ <title>Requêtes par identifiant naturel</title>
<para>
- 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
+ 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.
+ 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.
</para>
<para>
- D'abord vous devriez mapper la clef naturelle de votre entit� en utilisant
+ 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.
</para>
@@ -418,12 +420,12 @@
</class>]]></programlisting>
<para>
- Notez que cette fonctionnalit� n'est pas pr�vue pour l'utilisation avec des
- entit�s avec des clefs naturelles <emphasis>mutables</emphasis>.
+ Notez que cette fonctionnalité n'est pas prévue pour l'utilisation avec des
+ entités avec des clefs naturelles <emphasis>mutables</emphasis>.
</para>
<para>
- Ensuite, activez le cache de requ�te d'Hibernate.
+ Ensuite, activez le cache de requête d'Hibernate.
</para>
<para>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/query_hql.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/query_hql.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/query_hql.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,33 +1,35 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="queryhql">
- <title>HQL: Langage de requ�tage d'Hibernate</title>
+ <title>HQL: Langage de requêtage d'Hibernate</title>
<para>
- Hibernate fourni un langage d'interrogation extr�mement puissant qui
+ 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
+ HQL est totalement orienté objet, comprenant des notions d'héritage, de
polymorphisme et d'association.
</para>
<sect1 id="queryhql-casesensitivity">
- <title>Sensibilit� � la casse</title>
+ <title>Sensibilité à la casse</title>
<para>
- 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 �
+ 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> n'est pas identique à
<literal>foo.BARSET</literal>.
</para>
<para>
- 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.
+ 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.
</para>
</sect1>
@@ -36,7 +38,7 @@
<title>La clause from</title>
<para>
- La requ�te Hibernate la plus simple est de la forme :
+ La requête Hibernate la plus simple est de la forme :
</para>
<programlisting><![CDATA[from eg.Cat]]></programlisting>
@@ -44,37 +46,37 @@
<para>
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 :
+ puisque <literal>auto-import</literal> est la valeur par défaut. Donc nous écrivons presque toujours :
</para>
<programlisting><![CDATA[from Cat]]></programlisting>
<para>
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.
+ voudrez faire référence à <literal>Cat</literal> dans d'autres parties de la requête.
</para>
<programlisting><![CDATA[from Cat as cat]]></programlisting>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[from Cat cat]]></programlisting>
<para>
- Plusieurs classes peuvent appara�tre, ce qui conduira � un produit
- cart�sien (encore appel� jointures crois�es).
+ Plusieurs classes peuvent apparaître, ce qui conduira à un produit
+ cartésien (encore appelé jointures croisées).
</para>
<programlisting><![CDATA[from Formula, Parameter]]></programlisting>
<programlisting><![CDATA[from Formula as form, Parameter as param]]></programlisting>
<para>
- 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
+ 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>).
</para>
@@ -84,7 +86,7 @@
<title>Associations et jointures</title>
<para>
- On peut aussi assigner des alias � des entit�s associ�es, ou m�me aux �l�ments d'une collection
+ 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).
</para>
@@ -97,13 +99,13 @@
<programlisting><![CDATA[from Formula form full join form.parameter param]]></programlisting>
<para>
- Les types de jointures support�es sont celles de ANSI SQL
+ Les types de jointures supportées sont celles de ANSI SQL
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- <literal>inner join</literal> (jointure ferm�e)
+ <literal>inner join</literal> (jointure fermée)
</para>
</listitem>
<listitem>
@@ -118,14 +120,14 @@
</listitem>
<listitem>
<para>
- <literal>full join</literal> (jointure ouverte totalement - g�n�ralement inutile)
+ <literal>full join</literal> (jointure ouverte totalement - généralement inutile)
</para>
</listitem>
</itemizedlist>
<para>
Les constructions des jointures <literal>inner join</literal>, <literal>left outer join</literal>
- et <literal>right outer join</literal> peuvent �tre abbr�g�es.
+ et <literal>right outer join</literal> peuvent être abbrégées.
</para>
<programlisting><![CDATA[from Cat as cat
@@ -133,7 +135,7 @@
left join cat.kittens as kitten]]></programlisting>
<para>
- Nous pouvons soumettre des conditions de jointure suppl�mentaires en utilisant le mot-clef HQL <literal>with</literal>.
+ Nous pouvons soumettre des conditions de jointure supplémentaires en utilisant le mot-clef HQL <literal>with</literal>.
</para>
<programlisting><![CDATA[from Cat as cat
@@ -141,11 +143,11 @@
with kitten.bodyWeight > 10.0]]></programlisting>
<para>
- 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,
+ 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
+ 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.
</para>
@@ -155,11 +157,11 @@
left join fetch cat.kittens]]></programlisting>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[from Cat as cat
@@ -168,20 +170,20 @@
left join fetch child.kittens]]></programlisting>
<para>
- Notez que la construction de <literal>fetch</literal> ne peut pas �tre utilis�e dans les requ�tes appel�es par
+ 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
+ <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.
+ 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.
</para>
<para>
- 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)
+ 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>.
</para>
@@ -198,15 +200,15 @@
</para>
<para>
- 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.
+ 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.
</para>
<para>
- 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
+ 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�.
+ résultent en des inner join dans le SQL généré.
</para>
<programlisting><![CDATA[from Cat as cat where cat.mate.name like '%s%']]></programlisting>
@@ -216,8 +218,8 @@
<title>La clause select</title>
<para>
- 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.
+ 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 :
</para>
@@ -226,14 +228,14 @@
inner join cat.mate as mate]]></programlisting>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[select cat.mate from Cat cat]]></programlisting>
<para>
- Les requ�tes peuvent retourner des propri�t�s de n'importe quel type, m�me celles de type
+ Les requêtes peuvent retourner des propriétés de n'importe quel type, même celles de type
composant (component) :
</para>
@@ -243,7 +245,7 @@
<programlisting><![CDATA[select cust.name.firstName from Customer as cust]]></programlisting>
<para>
- Les requ�tes peuvent retourner plusieurs objets et/ou propri�t�s sous la forme
+ Les requêtes peuvent retourner plusieurs objets et/ou propriétés sous la forme
d'un tableau du type <literal>Object[]</literal>,
</para>
@@ -262,7 +264,7 @@
left outer join mother.kittens as offspr]]></programlisting>
<para>
- ou sous la forme d'un objet Java typ�,
+ ou sous la forme d'un objet Java typé,
</para>
<programlisting><![CDATA[select new Family(mother, mate, offspr)
@@ -271,18 +273,18 @@
left join mother.kittens as offspr]]></programlisting>
<para>
- � condition que la classe <literal>Family</literal> poss�de le constructeur appropri�.
+ à condition que la classe <literal>Family</literal> possède le constructeur approprié.
</para>
<para>
- Vous pouvez assigner des alias aux expressions s�lectionn�es en utilisant <literal>as</literal> :
+ Vous pouvez assigner des alias aux expressions sélectionnées en utilisant <literal>as</literal> :
</para>
<programlisting><![CDATA[select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n
from Cat cat]]></programlisting>
<para>
- C'est surtout utile lorsque c'est utilis� avec
+ C'est surtout utile lorsque c'est utilisé avec
<literal>select new map</literal> :
</para>
@@ -290,17 +292,17 @@
from Cat cat]]></programlisting>
<para>
- Cette requ�te retourne une <literal>Map</literal> � partir des alias vers les valeurs s�lectionn�es.
+ Cette requête retourne une <literal>Map</literal> à partir des alias vers les valeurs sélectionnées.
</para>
</sect1>
<sect1 id="queryhql-aggregation">
- <title>Fonctions d'aggr�gation</title>
+ <title>Fonctions d'aggrégation</title>
<para>
- Les requ�tes HQL peuvent aussi retourner le r�sultat de fonctions d'aggr�gation
- sur les propri�t�s :
+ Les requêtes HQL peuvent aussi retourner le résultat de fonctions d'aggrégation
+ sur les propriétés :
</para>
<programlisting><![CDATA[select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)
@@ -317,7 +319,7 @@
-->
<para>
- Les fonctions support�es sont
+ Les fonctions supportées sont
</para>
<itemizedlist spacing="compact">
@@ -339,7 +341,7 @@
</itemizedlist>
<para>
- Vous pouvez utiliser des op�rateurs arithm�tiques, la concat�nation, et des fonctions SQL reconnues dans la clause select :
+ Vous pouvez utiliser des opérateurs arithmétiques, la concaténation, et des fonctions SQL reconnues dans la clause select :
</para>
<programlisting><![CDATA[select cat.weight + sum(kitten.weight)
@@ -350,8 +352,8 @@
<programlisting><![CDATA[select firstName||' '||initial||' '||upper(lastName) from Person]]></programlisting>
<para>
- Les mots cl� <literal>distinct</literal> et <literal>all</literal> peuvent �tre utilis�s et ont
- la m�me signification qu'en SQL.
+ Les mots clé <literal>distinct</literal> et <literal>all</literal> peuvent être utilisés et ont
+ la même signification qu'en SQL.
</para>
<programlisting><![CDATA[select distinct cat.name from Cat cat
@@ -361,34 +363,34 @@
</sect1>
<sect1 id="queryhql-polymorphism">
- <title>Requ�tes polymorphiques</title>
+ <title>Requêtes polymorphiques</title>
<para>
- Une requ�te comme:
+ Une requête comme:
</para>
<programlisting><![CDATA[from Cat as cat]]></programlisting>
<para>
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 :
+ 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 :
</para>
<programlisting><![CDATA[from java.lang.Object o]]></programlisting>
<para>
- L'interface <literal>Named</literal> peut �tre impl�ment�e par plusieurs classes persistantes :
+ L'interface <literal>Named</literal> peut être implémentée par plusieurs classes persistantes :
</para>
<programlisting><![CDATA[from Named n, Named m where n.name = m.name]]></programlisting>
<para>
- 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
+ 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>).
</para>
@@ -398,20 +400,20 @@
<title>La clause where</title>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[from Cat where name='Fritz']]></programlisting>
<para>
- S'il y a un alias, utilisez un nom de propri�t� qualifi� :
+ S'il y a un alias, utilisez un nom de propriété qualifié :
</para>
<programlisting><![CDATA[from Cat as cat where cat.name='Fritz']]></programlisting>
<para>
- retourne les instances de <literal>Cat</literal> dont name est �gale � 'Fritz'.
+ retourne les instances de <literal>Cat</literal> dont name est égale à 'Fritz'.
</para>
<programlisting><![CDATA[select foo
@@ -421,28 +423,28 @@
<para>
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>.
+ 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 :
+ extrêmement puissante. Soit :
</para>
<programlisting><![CDATA[from Cat cat where cat.mate.name is not null]]></programlisting>
<para>
- Cette requ�te se traduit en SQL par une jointure interne � une table.
- Si vous souhaitez �crire quelque chose comme :
+ Cette requête se traduit en SQL par une jointure interne à une table.
+ Si vous souhaitez écrire quelque chose comme :
</para>
<programlisting><![CDATA[from Foo foo
where foo.bar.baz.customer.address.city is not null]]></programlisting>
<para>
- vous finiriez avec une requ�te qui n�cessiterait quatre jointures en SQL.
+ vous finiriez avec une requête qui nécessiterait quatre jointures en SQL.
</para>
<para>
- L'op�rateur <literal>=</literal> peut �tre utilis� pour comparer aussi bien des propri�t�s que des instances :
+ L'opérateur <literal>=</literal> peut être utilisé pour comparer aussi bien des propriétés que des instances :
</para>
<programlisting><![CDATA[from Cat cat, Cat rival where cat.mate = rival.mate]]></programlisting>
@@ -452,9 +454,9 @@
where cat.mate = mate]]></programlisting>
<para>
- 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�).
+ 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é).
</para>
<programlisting><![CDATA[from Cat as cat where cat.id = 123
@@ -462,12 +464,12 @@
from Cat as cat where cat.mate.id = 69]]></programlisting>
<para>
- La seconde requ�te est particuli�rement efficace. Aucune jointure n'est n�cessaire !
+ La seconde requête est particulièrement efficace. Aucune jointure n'est nécessaire !
</para>
<para>
- 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
+ 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>.
</para>
@@ -480,22 +482,22 @@
and account.owner.id.medicareNumber = 123456]]></programlisting>
<para>
- Une fois de plus, la seconde requ�te ne n�cessite pas de jointure.
+ Une fois de plus, la seconde requête ne nécessite pas de jointure.
</para>
<para>
- 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
+ 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.
</para>
<programlisting><![CDATA[from Cat cat where cat.class = DomesticCat]]></programlisting>
<para>
- Vous pouvez aussi sp�cifier les propri�t�s des composants ou types utilisateurs compos�s
+ 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
+ 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>
</para>
@@ -503,17 +505,17 @@
store.owner.address // error!]]></programlisting>
<para>
- 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>).
+ 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>).
</para>
<programlisting><![CDATA[from AuditLog log, Payment payment
where log.item.class = 'Payment' and log.item.id = payment.id]]></programlisting>
<para>
- 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.
+ 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.
</para>
</sect1>
@@ -529,22 +531,22 @@
<itemizedlist spacing="compact">
<listitem>
<para>
- op�rateurs math�matiques <literal>+, -, *, /</literal>
+ opérateurs mathématiques <literal>+, -, *, /</literal>
</para>
</listitem>
<listitem>
<para>
- op�rateur de comparaison binaire <literal>=, >=, <=, <>, !=, like</literal>
+ opérateur de comparaison binaire <literal>=, >=, <=, <>, !=, like</literal>
</para>
</listitem>
<listitem>
<para>
- op�rateurs logiques <literal>and, or, not</literal>
+ opérateurs logiques <literal>and, or, not</literal>
</para>
</listitem>
<listitem>
<para>
- Parenth�ses <literal>( )</literal>, indiquant un regroupement
+ Parenthèses <literal>( )</literal>, indiquant un regroupement
</para>
</listitem>
<listitem>
@@ -568,7 +570,7 @@
</listitem>
<listitem>
<para>
- concatenation de cha�ne de caract�res <literal>...||...</literal> ou <literal>concat(...,...)</literal>
+ concatenation de chaîne de caractères <literal>...||...</literal> ou <literal>concat(...,...)</literal>
</para>
</listitem>
<listitem>
@@ -586,7 +588,7 @@
</listitem>
<listitem>
<para>
- N'importe quel fonction ou op�rateur d�fini par EJB-QL 3.0 : <literal>substring(), trim(),
+ 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>
</para>
</listitem>
@@ -597,48 +599,48 @@
</listitem>
<listitem>
<para>
- <literal>str()</literal> pour convertir des valeurs num�riques ou temporelles vers une cha�ne de caract�res lisible
+ <literal>str()</literal> pour convertir des valeurs numériques ou temporelles vers une chaîne de caractères lisible
</para>
</listitem>
<listitem>
<para>
- <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
+ <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
</para>
</listitem>
<listitem>
<para>
- La fonction HQL <literal>index()</literal>, qui s'applique aux alias d'une collection index�e jointe
+ La fonction HQL <literal>index()</literal>, qui s'applique aux alias d'une collection indexée jointe
</para>
</listitem>
<listitem>
<para>
- 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>.
+ 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>.
</para>
</listitem>
<listitem>
<para>
- N'importe quelle fonction scalaire support�e par la base de donn�es comme
+ 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>
</para>
</listitem>
<listitem>
<para>
- Les param�tres positionnels de JDBC
+ Les paramètres positionnels de JDBC
<literal>?</literal>
</para>
</listitem>
<listitem>
<para>
- param�tres nomm�s <literal>:name</literal>, <literal>:start_date</literal>, <literal>:x1</literal>
+ paramètres nommés <literal>:name</literal>, <literal>:start_date</literal>, <literal>:x1</literal>
</para>
</listitem>
<listitem>
<para>
- litt�ral SQL <literal>'foo'</literal>, <literal>69</literal>, <literal>'1970-01-01 10:00:01.0'</literal>
+ littéral SQL <literal>'foo'</literal>, <literal>69</literal>, <literal>'1970-01-01 10:00:01.0'</literal>
</para>
</listitem>
<listitem>
@@ -649,7 +651,7 @@
</itemizedlist>
<para>
- <literal>in</literal> et <literal>between</literal> peuvent �tre utilis�s comme suit :
+ <literal>in</literal> et <literal>between</literal> peuvent être utilisés comme suit :
</para>
<programlisting><![CDATA[from DomesticCat cat where cat.name between 'A' and 'B']]></programlisting>
@@ -657,7 +659,7 @@
<programlisting><![CDATA[from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )]]></programlisting>
<para>
- et la forme n�gative peut �tre �crite
+ et la forme négative peut être écrite
</para>
<programlisting><![CDATA[from DomesticCat cat where cat.name not between 'A' and 'B']]></programlisting>
@@ -665,27 +667,27 @@
<programlisting><![CDATA[from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )]]></programlisting>
<para>
- De m�me, <literal>is null</literal> et <literal>is not null</literal> peuvent �tre utilis�s pour tester
+ De même, <literal>is null</literal> et <literal>is not null</literal> peuvent être utilisés pour tester
les valeurs nulle.
</para>
<para>
- Les bool�ens peuvent �tre facilement utilis�s en d�clarant les substitutions de requ�tes dans la
+ Les booléens peuvent être facilement utilisés en déclarant les substitutions de requêtes dans la
configuration Hibernate :
</para>
<programlisting><![CDATA[<property name="hibernate.query.substitutions">true 1, false 0</property>]]></programlisting>
<para>
- Ce qui remplacera les mots cl�s <literal>true</literal> et <literal>false</literal> par
+ 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 :
</para>
<programlisting><![CDATA[from Cat cat where cat.alive = true]]></programlisting>
<para>
- 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>.
+ 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>.
</para>
<programlisting><![CDATA[from Cat cat where cat.kittens.size > 0]]></programlisting>
@@ -693,9 +695,9 @@
<programlisting><![CDATA[from Cat cat where size(cat.kittens) > 0]]></programlisting>
<para>
- 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
+ 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>.
</para>
@@ -706,9 +708,9 @@
<programlisting><![CDATA[from Order order where minelement(order.items) > 10000]]></programlisting>
<para>
- 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).
+ 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).
</para>
<programlisting><![CDATA[select mother from Cat as mother, Cat as kit
@@ -724,13 +726,13 @@
<programlisting><![CDATA[from Show show where 'fizard' in indices(show.acts)]]></programlisting>
<para>
- Notez que l'�criture de - <literal>size</literal>, <literal>elements</literal>,
+ 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.
+ <literal>minelement</literal>, <literal>maxelement</literal> - peuvent seulement être utilisée dans la clause where dans Hibernate3.
</para>
<para>
- Les �l�ments de collections index�es (arrays, lists, maps) peuvent �tre r�f�renc�s via index
+ Les éléments de collections indexées (arrays, lists, maps) peuvent être référencés via index
(dans une clause where seulement) :
</para>
@@ -747,14 +749,14 @@
where order.items[ maxindex(order.items) ] = item and order.id = 11]]></programlisting>
<para>
- L'expression entre <literal>[]</literal> peut m�me �tre une expression arithm�tique.
+ L'expression entre <literal>[]</literal> peut même être une expression arithmétique.
</para>
<programlisting><![CDATA[select item from Item item, Order order
where order.items[ size(order.items) - 1 ] = item]]></programlisting>
<para>
- HQL propose aussi une fonction <literal>index()</literal> interne, pour les �l�ments
+ 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.
</para>
@@ -763,14 +765,14 @@
where index(item) < 5]]></programlisting>
<para>
- Les fonctions SQL scalaires support�es par la base de donn�es utilis�e peuvent �tre utilis�es
+ Les fonctions SQL scalaires supportées par la base de données utilisée peuvent être utilisées
</para>
<programlisting><![CDATA[from DomesticCat cat where upper(cat.name) like 'FRI%']]></programlisting>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[select cust
@@ -809,8 +811,8 @@
<title>La clause order by</title>
<para>
- 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� :
+ 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é :
</para>
<programlisting><![CDATA[from DomesticCat cat
@@ -818,7 +820,7 @@
<para>
Le mot optionnel <literal>asc</literal> ou <literal>desc</literal> indique respectivement si le tri
- doit �tre croissant ou d�croissant.
+ doit être croissant ou décroissant.
</para>
</sect1>
@@ -826,7 +828,7 @@
<title>La clause group by</title>
<para>
- Si la requ�te retourne des valeurs aggr�g�es, celles ci peuvent �tre group�es par propri�t� ou composant :
+ Si la requête retourne des valeurs aggrégées, celles ci peuvent être groupées par propriété ou composant :
</para>
<programlisting><![CDATA[select cat.color, sum(cat.weight), count(cat)
@@ -847,8 +849,8 @@
having cat.color in (eg.Color.TABBY, eg.Color.BLACK)]]></programlisting>
<para>
- 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).
+ 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).
</para>
<programlisting><![CDATA[select cat
@@ -860,19 +862,19 @@
<para>
Notez que ni la clause <literal>group by</literal> ni la clause
- <literal>order by</literal> ne peuvent contenir d'expressions arithm�tiques.
+ <literal>order by</literal> ne peuvent contenir d'expressions arithmétiques.
</para>
</sect1>
<sect1 id="queryhql-subqueries" revision="2">
- <title>Sous-requ�tes</title>
+ <title>Sous-requêtes</title>
<para>
- 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.
+ 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.
</para>
<programlisting><![CDATA[from Cat as fatcat
@@ -899,11 +901,11 @@
from Cat as cat]]></programlisting>
<para>
- Notez que les sous-requ�tes HQL peuvent arriver seulememnt dans les clauses select ou where.
+ Notez que les sous-requêtes HQL peuvent arriver seulememnt dans les clauses select ou where.
</para>
<para>
- Pour des sous-requ�tes avec plus d'une expression dans le select, vous pouvez utiliser un constructeur de tuples :
+ Pour des sous-requêtes avec plus d'une expression dans le select, vous pouvez utiliser un constructeur de tuples :
</para>
<programlisting><![CDATA[from Cat as cat
@@ -912,22 +914,22 @@
)]]></programlisting>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[from Person where name = ('Gavin', 'A', 'King')]]></programlisting>
<para>
- Ce qui est �quivalent � la forme plus verbeuse suivante :
+ Ce qui est équivalent à la forme plus verbeuse suivante :
</para>
<programlisting><![CDATA[from Person where name.first = 'Gavin' and name.initial = 'A' and name.last = 'King')]]></programlisting>
<para>
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.
+ 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.
</para>
</sect1>
@@ -936,19 +938,19 @@
<title>Exemples HQL</title>
<para>
- 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 !
+ 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 !
</para>
<para>
- 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
+ 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).
+ <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).
</para>
<programlisting><![CDATA[select order.id, sum(price.amount), count(item)
@@ -972,8 +974,8 @@
<para>
Quel monstre !
- En principe, nous ne sommes pas tr�s fan des sous-requ�tes, la requ�te ressemblait donc plut�t
- � cela :
+ En principe, nous ne sommes pas très fan des sous-requêtes, la requête ressemblait donc plutôt
+ à cela :
</para>
<programlisting><![CDATA[select order.id, sum(price.amount), count(item)
@@ -991,10 +993,10 @@
order by sum(price.amount) desc]]></programlisting>
<para>
- 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>,
+ 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>.
</para>
@@ -1015,8 +1017,8 @@
order by status.sortOrder]]></programlisting>
<para>
- 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.
+ 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.
</para>
<programlisting><![CDATA[select count(payment), status.name
@@ -1028,10 +1030,10 @@
order by status.sortOrder]]></programlisting>
<para>
- 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
+ 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>,
+ 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>.
</para>
@@ -1044,7 +1046,7 @@
order by account.type.sortOrder, account.accountNumber, payment.dueDate]]></programlisting>
<para>
- Pour d'autres base de donn�es, nous aurions d� faire sans la sous-requ�te (corr�l�e).
+ Pour d'autres base de données, nous aurions dû faire sans la sous-requête (corrélée).
</para>
<programlisting><![CDATA[select account, payment
@@ -1058,12 +1060,12 @@
</sect1>
<sect1 id="queryhql-bulk" revision="2">
- <title>Mise � jour et suppression</title>
+ <title>Mise à jour et suppression</title>
<para>
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.
+ Voir <xref linkend="batch-direct"/> pour les détails.
</para>
</sect1>
@@ -1071,13 +1073,13 @@
<title>Trucs & Astuces</title>
<para>
- Vous pouvez compter le nombre de r�sultats d'une requ�te sans les retourner :
+ Vous pouvez compter le nombre de résultats d'une requête sans les retourner :
</para>
<programlisting><![CDATA[( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue()]]></programlisting>
<para>
- Pour trier les r�sultats par la taille d'une collection, utilisez la requ�te suivante :
+ Pour trier les résultats par la taille d'une collection, utilisez la requête suivante :
</para>
<programlisting><![CDATA[select usr.id, usr.name
@@ -1087,14 +1089,14 @@
order by count(msg)]]></programlisting>
<para>
- 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:
+ 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:
</para>
<programlisting><![CDATA[from User usr where size(usr.messages) >= 1]]></programlisting>
<para>
- Si votre base de donn�es ne supporte pas les sous-requ�tes, utilisez la requ�te suivante :
+ Si votre base de données ne supporte pas les sous-requêtes, utilisez la requête suivante :
</para>
<programlisting><![CDATA[select usr.id, usr.name
@@ -1104,8 +1106,8 @@
having count(msg) >= 1]]></programlisting>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[select usr.id, usr.name
@@ -1115,7 +1117,7 @@
having count(msg) = 0]]></programlisting>
<para>
- Les propri�t�s d'un JavaBean peuvent �tre inject�es dans les param�tres nomm�s d'un requ�te :
+ Les propriétés d'un JavaBean peuvent être injectées dans les paramètres nommés d'un requête :
</para>
<programlisting><![CDATA[Query q = s.createQuery("from foo Foo as foo where foo.name=:name and foo.size=:size");
@@ -1132,14 +1134,14 @@
List page = q.list();]]></programlisting>
<para>
- Les �l�ments d'une collection peuvent �tre tri�s ou group�s en utilisant un filtre de requ�te :
+ Les éléments d'une collection peuvent être triés ou groupés en utilisant un filtre de requête :
</para>
<programlisting><![CDATA[Collection orderedCollection = s.filter( collection, "order by this.amount" );
Collection counts = s.filter( collection, "select this.type, count(this) group by this.type" );]]></programlisting>
<para>
- Vous pouvez r�cup�rer la taille d'une collection sans l'initialiser :
+ Vous pouvez récupérer la taille d'une collection sans l'initialiser :
</para>
<programlisting><![CDATA[( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue();]]></programlisting>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/query_sql.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/query_sql.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/query_sql.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,46 +1,48 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="querysql" revision="2">
<title>SQL natif</title>
<para>
- 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
+ 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.
</para>
- <para>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.</para>
+ <para>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.</para>
<sect1 id="querysql-creating" revision="3">
<title>Utiliser une <literal>SQLQuery</literal></title>
- <para>L'ex�cution des requ�tes en SQL natif est contr�l�e par l'interface <literal>SQLQuery</literal>,
+ <para>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 :
+ Dans des cas extrêmement simples, nous pouvons utiliser la forme suivante :
</para>
<programlisting>List cats = sess.createSQLQuery("select * from cats")
.addEntity(Cat.class)
.list();</programlisting>
- <para>Cette requ�te a sp�cifi� :</para>
+ <para>Cette requête a spécifié :</para>
<itemizedlist>
<listitem>
- <para>la requ�te SQL</para>
+ <para>la requête SQL</para>
</listitem>
<listitem>
- <para>l'entit� retourn�e par la requ�te</para>
+ <para>l'entité retournée par la requête</para>
</listitem>
</itemizedlist>
<para>
- 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
+ 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 :
</para>
@@ -48,26 +50,26 @@
.addEntity("cat", Cat.class)
.list();</programlisting>
- <para>Cette requ�te a sp�cifi� :</para>
+ <para>Cette requête a spécifié :</para>
<itemizedlist>
<listitem>
- <para>la requ�te SQL, avec un param�tre fictif pour Hibernate pour injecter les alias de colonne</para>
+ <para>la requête SQL, avec un paramètre fictif pour Hibernate pour injecter les alias de colonne</para>
</listitem>
<listitem>
- <para>l'entit� retourn�e par la requ�te, et son alias de table SQL</para>
+ <para>l'entité retournée par la requête, et son alias de table SQL</para>
</listitem>
</itemizedlist>
<para>
- 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.
+ 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.
</para>
<para>
- La m�thode <literal>addJoin()</literal> peut �tre utilis�e pour charger des associations vers d'autres
- entit�s et collections.
+ La méthode <literal>addJoin()</literal> peut être utilisée pour charger des associations vers d'autres
+ entités et collections.
</para>
<programlisting>List cats = sess.createSQLQuery(
@@ -78,15 +80,15 @@
.list();</programlisting>
<para>
- Une requ�te SQL native pourrait retourner une simple valeur scalaire ou une combinaison de scalaires et d'entit�s.
+ Une requête SQL native pourrait retourner une simple valeur scalaire ou une combinaison de scalaires et d'entités.
</para>
<programlisting>Double max = (Double) sess.createSQLQuery("select max(cat.weight) as maxWeight from cats cat")
.addScalar("maxWeight", Hibernate.DOUBLE);
.uniqueResult();</programlisting>
- <para>Vous pouvez alternativement d�crire les informations de mapping des r�sultats dans vos fichiers hbm
- et les utiliser pour vos requ�tes.</para>
+ <para>Vous pouvez alternativement décrire les informations de mapping des résultats dans vos fichiers hbm
+ et les utiliser pour vos requêtes.</para>
<programlisting>List cats = sess.createSQLQuery(
"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id"
@@ -96,20 +98,20 @@
</sect1>
<sect1 id="querysql-aliasreferences">
- <title>Alias et r�f�rences de propri�t�</title>
+ <title>Alias et références de propriété</title>
<para>
- La notation <literal>{cat.*}</literal> utilis�e au-dessus est un raccourci pour "toutes les propri�t�s".
- Alternativement, vous pouvez lister explicitement les colonnes, mais m�me ce cas que nous laissons � Hibernate
- injecte des alias de colonne SQL pour chaque propri�t�. Le rempla�ant pour un alias de colonne
- est juste le nom de la propri�t� qualifi� par l'alias de la table.
- Dans l'exemple suivant, nous r�cup�rons des <literal>Cat</literal>s � partir d'une table diff�rente
- (<literal>cat_log</literal>) de celle d�clar�e dans les m�ta-donn�es de mapping.
- Notez que nous pouvons m�me utiliser les alias de propri�t� dans la clause "where" si nous le souhaitons.
+ La notation <literal>{cat.*}</literal> utilisée au-dessus est un raccourci pour "toutes les propriétés".
+ Alternativement, vous pouvez lister explicitement les colonnes, mais même ce cas que nous laissons à Hibernate
+ injecte des alias de colonne SQL pour chaque propriété. Le remplaçant pour un alias de colonne
+ est juste le nom de la propriété qualifié par l'alias de la table.
+ Dans l'exemple suivant, nous récupérons des <literal>Cat</literal>s à partir d'une table différente
+ (<literal>cat_log</literal>) de celle déclarée dans les méta-données de mapping.
+ Notez que nous pouvons même utiliser les alias de propriété dans la clause "where" si nous le souhaitons.
</para>
<para>
- La syntaxe <literal>{}</literal> <emphasis>n'est pas</emphasis> requise pour le requ�tes nomm�es. Voir
+ La syntaxe <literal>{}</literal> <emphasis>n'est pas</emphasis> requise pour le requêtes nommées. Voir
<xref linkend="querysql-namedqueries" />.
</para>
@@ -124,13 +126,13 @@
.list();</programlisting>
<para>
- <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> !
+ <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> !
</para>
<para>
- 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.
+ 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.
</para>
<table frame="topbot" id="aliasinjection-summary">
@@ -155,7 +157,7 @@
<tbody>
<row>
- <entry>Une simple propri�t�</entry>
+ <entry>Une simple propriété</entry>
<entry><literal>{[aliasname].[propertyname]}</literal></entry>
@@ -163,7 +165,7 @@
</row>
<row>
- <entry>Une propri�t� compos�e</entry>
+ <entry>Une propriété composée</entry>
<entry><literal>{[aliasname].[componentname].[propertyname]}</literal></entry>
@@ -172,7 +174,7 @@
</row>
<row>
- <entry>Discriminant d'une entit�</entry>
+ <entry>Discriminant d'une entité</entry>
<entry><literal>{[aliasname].class}</literal></entry>
@@ -180,7 +182,7 @@
</row>
<row>
- <entry>Toutes les propri�t�s d'une entit�</entry>
+ <entry>Toutes les propriétés d'une entité</entry>
<entry><literal>{[aliasname].*}</literal></entry>
@@ -204,7 +206,7 @@
</row>
<row>
- <entry>L'�l�ment d'une collection</entry>
+ <entry>L'élément d'une collection</entry>
<entry><literal>{[aliasname].element}</literal></entry>
@@ -214,7 +216,7 @@
</row>
<row>
- <entry>Propri�t� de l'�l�ment dans la collection</entry>
+ <entry>Propriété de l'élément dans la collection</entry>
<entry><literal>{[aliasname].element.[propertyname]}</literal></entry>
@@ -222,7 +224,7 @@
</row>
<row>
- <entry>Toutes les propri�t�s de l'�l�ment dans la collection</entry>
+ <entry>Toutes les propriétés de l'élément dans la collection</entry>
<entry><literal>{[aliasname].element.*}</literal></entry>
@@ -230,7 +232,7 @@
</row>
<row>
- <entry>Toutes les propri�t�s de la collection</entry>
+ <entry>Toutes les propriétés de la collection</entry>
<entry><literal>{[aliasname].*}</literal></entry>
@@ -242,11 +244,11 @@
</sect1>
<sect1 id="querysql-namedqueries" revision="3">
- <title>Requ�tes SQL nomm�es</title>
+ <title>Requêtes SQL nommées</title>
<para>
- 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
+ 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>.
</para>
@@ -265,9 +267,9 @@
.list();</programlisting>
<para>
- 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.
+ 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.
</para>
<programlisting><sql-query name="personsWith">
@@ -287,8 +289,8 @@
</sql-query></programlisting>
<para>
- 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
+ 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> :</para>
<programlisting><sql-query name="mySqlQuery">
@@ -300,9 +302,9 @@
</sql-query></programlisting>
<para>
- 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
+ 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>.
</para>
@@ -326,11 +328,11 @@
</sql-query></programlisting>
<sect2 id="propertyresults">
- <title>Utilisation de return-property pour sp�cifier explicitement les noms des colonnes/alias</title>
+ <title>Utilisation de return-property pour spécifier explicitement les noms des colonnes/alias</title>
<para>
Avec <literal><return-property></literal> vous pouvez explicitement dire
- � Hibernate quels alias de colonne utiliser, plutot que d'employer la syntaxe
+ à Hibernate quels alias de colonne utiliser, plutot que d'employer la syntaxe
<literal>{}</literal> pour laisser Hibernate injecter ses propres alias.
</para>
@@ -349,8 +351,8 @@
<para>
<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.
+ 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.
</para>
<programlisting><sql-query name="organizationCurrentEmployments">
@@ -370,28 +372,28 @@
</sql-query></programlisting>
<para>
- Notez que dans cet exemple nous avons utilis� <literal><return-property></literal>
+ 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.
+ utilisateurs à choisir comment ils veulent référencer les colonnes et les propriétés.
</para>
<para>
Si votre mapping a un discriminant vous devez utiliser
- <literal><return-discriminator></literal> pour sp�cifier la colonne
+ <literal><return-discriminator></literal> pour spécifier la colonne
discriminante.
</para>
</sect2>
<sect2 id="sp_query" revision="1">
- <title>Utilisation de proc�dures stock�es pour les requ�tes</title>
+ <title>Utilisation de procédures stockées pour les requêtes</title>
<para>
- Hibernate 3 introduit le support des requ�tes via proc�dures stock�es et les fonctions.
+ 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 :
+ 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 :
</para>
<programlisting>CREATE OR REPLACE FUNCTION selectAllEmployments
@@ -407,7 +409,7 @@
RETURN st_cursor;
END;</programlisting>
- <para>Pour utiliser cette requ�te dans Hibernate vous avez besoin de la mapper via une requ�te nomm�e.</para>
+ <para>Pour utiliser cette requête dans Hibernate vous avez besoin de la mapper via une requête nommée.</para>
<programlisting><sql-query name="selectAllEmployees_SP" callable="true">
<return alias="emp" class="Employment">
@@ -426,52 +428,52 @@
</sql-query></programlisting>
<para>
- 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.
+ 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.
</para>
<sect3 id="querysql-limits-storedprocedures" revision="1">
- <title>R�gles/limitations lors de l'utilisation des proc�dures stock�es</title>
+ <title>Règles/limitations lors de l'utilisation des procédures stockées</title>
<para>
- 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.
+ 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.
</para>
- <para>Les requ�tes de proc�dures stock�es ne peuvent pas �tre pagin�es avec
+ <para>Les requêtes de procédures stockées ne peuvent pas être paginées avec
<literal>setFirstResult()/setMaxResults()</literal>.</para>
- <para>Pour Oracle les r�gles suivantes s'appliquent :</para>
+ <para>Pour Oracle les règles suivantes s'appliquent :</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- La proc�dure doit retourner un ensemble de r�sultats. Le
- prmeier param�tre d'une proc�dure doit �tre un <literal>OUT</literal>
- qui retourne un ensemble de r�sultats. Ceci est fait en
+ La procédure doit retourner un ensemble de résultats. Le
+ prmeier paramètre d'une procédure doit être un <literal>OUT</literal>
+ qui retourne un ensemble de résultats. Ceci est fait en
retournant un <literal>SYS_REFCURSOR</literal> dans Oracle 9 ou 10. Dans
- Oracle vous avez besoin de d�finir un type <literal>REF CURSOR</literal>.</para>
+ Oracle vous avez besoin de définir un type <literal>REF CURSOR</literal>.</para>
</listitem>
</itemizedlist>
- <para>Pour Sybase ou MS SQL server les r�gles suivantes s'appliquent :</para>
+ <para>Pour Sybase ou MS SQL server les règles suivantes s'appliquent :</para>
<itemizedlist spacing="compact">
<listitem>
- <para>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�.</para>
+ <para>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é.</para>
</listitem>
<listitem>
- <para>Si vous pouvez activer <literal>SET NOCOUNT ON</literal> dans votre proc�dure,
+ <para>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.</para>
</listitem>
</itemizedlist>
@@ -480,16 +482,16 @@
</sect1>
<sect1 id="querysql-cud">
- <title>SQL personnalis� pour cr�er, mettre � jour et effacer</title>
+ <title>SQL personnalisé pour créer, mettre à jour et effacer</title>
<para>
- 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
+ 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 :</para>
+ <literal><sql-update></literal> surchargent ces chaînes de caractères :</para>
<programlisting><class name="Person">
<id name="id">
@@ -501,11 +503,11 @@
<sql-delete>DELETE FROM PERSON WHERE ID=?</sql-delete>
</class></programlisting>
- <para>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.</para>
+ <para>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.</para>
- <para>Les proc�dures stock�es sont support�es si l'attribut <literal>callable</literal> est param�tr� :</para>
+ <para>Les procédures stockées sont supportées si l'attribut <literal>callable</literal> est paramétré :</para>
<programlisting><class name="Person">
<id name="id">
@@ -517,22 +519,22 @@
<sql-update callable="true">{? = call updatePerson (?, ?)}</sql-update>
</class></programlisting>
- <para>L'ordre des param�tres positionnels est actuellement vital, car ils doivent �tre dans la
- m�me s�quence qu'Hibernate les attend.</para>
+ <para>L'ordre des paramètres positionnels est actuellement vital, car ils doivent être dans la
+ même séquence qu'Hibernate les attend.</para>
<para>
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.)</para>
+ 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.)</para>
- <para>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 :</para>
+ <para>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 :</para>
<programlisting>CREATE OR REPLACE FUNCTION updatePerson (uid IN NUMBER, uname IN VARCHAR2)
RETURN NUMBER IS
@@ -550,9 +552,9 @@
</sect1>
<sect1 id="querysql-load">
- <title>SQL personnalis� pour le chargement</title>
+ <title>SQL personnalisé pour le chargement</title>
- <para>Vous pouvez aussi d�clarer vos propres requ�tes SQL (ou HQL) pour le chargement d'entit� :</para>
+ <para>Vous pouvez aussi déclarer vos propres requêtes SQL (ou HQL) pour le chargement d'entité :</para>
<programlisting><sql-query name="person">
<return alias="pers" class="Person" lock-mode="upgrade"/>
@@ -562,8 +564,8 @@
FOR UPDATE
</sql-query></programlisting>
- <para>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 :</para>
+ <para>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 :</para>
<programlisting><class name="Person">
<id name="id">
@@ -573,9 +575,9 @@
<loader query-ref="person"/>
</class></programlisting>
- <para>Ceci fonctionne m�me avec des proc�dures stock�es.</para>
+ <para>Ceci fonctionne même avec des procédures stockées.</para>
- <para>Vous pouvez m�me d�finir une requ�te pour le chargement d'une collection :</para>
+ <para>Vous pouvez même définir une requête pour le chargement d'une collection :</para>
<programlisting><set name="employments" inverse="true">
<key/>
@@ -591,7 +593,7 @@
ORDER BY STARTDATE ASC, EMPLOYEE ASC
</sql-query></programlisting>
- <para>Vous pourriez m�me d�finir un chargeur d'entit� qui charge une collection par jointure :</para>
+ <para>Vous pourriez même définir un chargeur d'entité qui charge une collection par jointure :</para>
<programlisting><sql-query name="person">
<return alias="pers" class="Person"/>
@@ -603,4 +605,4 @@
WHERE ID=?
</sql-query></programlisting>
</sect1>
-</chapter>
\ No newline at end of file
+</chapter>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/session_api.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/session_api.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/session_api.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,70 +1,72 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="objectstate">
<title>Travailler avec des objets</title>
<para>
- 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
+ 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.
</para>
<para>
- 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.
+ 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.
</para>
<sect1 id="objectstate-overview">
- <title>�tats des objets Hibernate</title>
+ <title>États des objets Hibernate</title>
<para>
- Hibernate d�finit et comprend les �tats suivants :
+ Hibernate définit et comprend les états suivants :
</para>
<itemizedlist>
<listitem>
<para>
- <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>
+ <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).
+ expressions SQL qui ont besoin d'être exécutées pour cette transistion).
</para>
</listitem>
<listitem>
<para>
- <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.
+ <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.
</para>
</listitem>
<listitem>
<para>
- <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>
+ <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.
+ 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.
</para>
</listitem>
</itemizedlist>
<para>
- 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.
+ 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.
</para>
</sect1>
@@ -73,9 +75,9 @@
<title>Rendre des objets persistants</title>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[DomesticCat fritz = new DomesticCat();
@@ -85,17 +87,17 @@
Long generatedId = (Long) sess.save(fritz);]]></programlisting>
<para>
- 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.
+ 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.
</para>
<para>
Alternativement, vous pouvez assigner l'identifiant en utilisant une version
- surcharg�e de <literal>save()</literal>.
+ surchargée de <literal>save()</literal>.
</para>
<programlisting><![CDATA[DomesticCat pk = new DomesticCat();
@@ -107,23 +109,23 @@
sess.save( pk, new Long(1234) );]]></programlisting>
<para>
- 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
+ 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.
</para>
<para>
- 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>
+ 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.
+ traitée plus loin dans ce chapitre.
</para>
</sect1>
@@ -132,10 +134,10 @@
<title>Chargement d'un objet</title>
<para>
- 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.
+ 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.
</para>
<programlisting><![CDATA[Cat fritz = (Cat) sess.load(Cat.class, generatedId);]]></programlisting>
@@ -145,7 +147,7 @@
DomesticCat pk = (DomesticCat) sess.load( Cat.class, new Long(pkId) );]]></programlisting>
<para>
- Alternativement, vous pouvez charger un �tat dans une instance donn�e :
+ Alternativement, vous pouvez charger un état dans une instance donnée :
</para>
<programlisting><![CDATA[Cat cat = new DomesticCat();
@@ -154,20 +156,20 @@
Set kittens = cat.getKittens();]]></programlisting>
<para>
- 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.
+ 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.
</para>
<para>
- 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.
+ 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.
</para>
<programlisting><![CDATA[Cat cat = (Cat) sess.get(Cat.class, id);
@@ -178,23 +180,23 @@
return cat;]]></programlisting>
<para>
- Vous pouvez m�me charger un objet en employant un <literal>SELECT ... FOR UPDATE</literal> SQL,
+ 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.
</para>
<programlisting><![CDATA[Cat cat = (Cat) sess.get(Cat.class, id, LockMode.UPGRADE);]]></programlisting>
<para>
- 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>
+ 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.
</para>
<para>
- 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.
+ 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.
</para>
<programlisting><![CDATA[sess.save(cat);
@@ -202,34 +204,34 @@
sess.refresh(cat); //re-read the state (after the trigger executes)]]></programlisting>
<para>
- 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
+ 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"/>.
</para>
</sect1>
<sect1 id="objectstate-querying" revision="1">
- <title>Requ�tage</title>
+ <title>Requêtage</title>
<para>
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
+ 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.
</para>
<sect2 id="objectstate-querying-executing">
- <title>Ex�cution de requ�tes</title>
+ <title>Exécution de requêtes</title>
<para>
- 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
+ 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 :
</para>
@@ -254,26 +256,26 @@
.uniqueResult();]]></programlisting>
<para>
- 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.
+ 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.
</para>
<sect3 id="objectstate-querying-executing-iterate">
- <title>It�ration de r�sultats</title>
+ <title>Itération de résultats</title>
<para>
- 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>
+ 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.
+ selects supplémentaires pour initialiser les instances réelles.
</para>
<programlisting><![CDATA[// fetch ids
@@ -291,11 +293,11 @@
</sect3>
<sect3 id="objectstate-querying-executing-tuples">
- <title>Requ�tes qui retournent des tuples</title>
+ <title>Requêtes qui retournent des tuples</title>
<para>
- Les requ�tes d'Hibernate retournent parfois des tuples d'objets, auquel cas chaque tuple
- est retourn� comme un tableau :
+ Les requêtes d'Hibernate retournent parfois des tuples d'objets, auquel cas chaque tuple
+ est retourné comme un tableau :
</para>
<programlisting><![CDATA[Iterator kittensAndMothers = sess.createQuery(
@@ -313,12 +315,12 @@
</sect3>
<sect3 id="objectstate-querying-executing-scalar" revision="1">
- <title>R�sultats scalaires</title>
+ <title>Résultats scalaires</title>
<para>
- 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).
+ 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).
</para>
<programlisting><![CDATA[Iterator results = sess.createQuery(
@@ -338,46 +340,46 @@
</sect3>
<sect3 id="objectstate-querying-executing-parameters">
- <title>Lier des param�tres</title>
+ <title>Lier des paramètres</title>
<para>
- 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 :
+ 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 :
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- les param�tres nomm�s sont insensibles � l'ordre de leur place dans la cha�ne
- de la requ�te
+ les paramètres nommés sont insensibles à l'ordre de leur place dans la chaîne
+ de la requête
</para>
</listitem>
<listitem>
<para>
- ils peuvent appara�tre plusieurs fois dans la m�me requ�te
+ ils peuvent apparaître plusieurs fois dans la même requête
</para>
</listitem>
<listitem>
<para>
- ils sont auto-document�s
+ ils sont auto-documentés
</para>
</listitem>
</itemizedlist>
- <programlisting><![CDATA[//param�tre nomme (pr�f�r�)
+ <programlisting><![CDATA[//paramètre nomme (préféré)
Query q = sess.createQuery("from DomesticCat cat where cat.name = :name");
q.setString("name", "Fritz");
Iterator cats = q.iterate();]]></programlisting>
- <programlisting><![CDATA[//param�tre positionnel
+ <programlisting><![CDATA[//paramètre positionnel
Query q = sess.createQuery("from DomesticCat cat where cat.name = ?");
q.setString(0, "Izi");
Iterator cats = q.iterate();]]></programlisting>
- <programlisting><![CDATA[//liste de param�tres nomm�s
+ <programlisting><![CDATA[//liste de paramètres nommés
List names = new ArrayList();
names.add("Izi");
names.add("Fritz");
@@ -391,9 +393,9 @@
<title>Pagination</title>
<para>
- 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> :
+ 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> :
</para>
<programlisting><![CDATA[Query q = sess.createQuery("from DomesticCat cat");
@@ -402,19 +404,19 @@
List cats = q.list();]]></programlisting>
<para>
- Hibernate sait comment traduite cette requ�te de limite en SQL natif pour votre SGBD.
+ Hibernate sait comment traduite cette requête de limite en SQL natif pour votre SGBD.
</para>
</sect3>
<sect3 id="objectstate-querying-executing-scrolling">
- <title>It�ration "scrollable"</title>
+ <title>Itération "scrollable"</title>
<para>
Si votre connecteur JDBC supporte les <literal>ResultSet</literal>s "scrollables",
- l'interface <literal>Query</literal> peut �tre utilis�e pour obtenir un objet
+ 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.
+ résultats de la requête.
</para>
<programlisting><![CDATA[Query q = sess.createQuery("select cat.name, cat from DomesticCat cat " +
@@ -422,7 +424,7 @@
ScrollableResults cats = q.scroll();
if ( cats.first() ) {
- // trouve le premier nom sur chaque page d'une liste alphab�tique de noms de chats
+ // trouve le premier nom sur chaque page d'une liste alphabétique de noms de chats
firstNamesOfPages = new ArrayList();
do {
String name = cats.getString(0);
@@ -430,7 +432,7 @@
}
while ( cats.scroll(PAGE_SIZE) );
- // Maintenant, obtiens la premi�re page de chats
+ // Maintenant, obtiens la première page de chats
pageOfCats = new ArrayList();
cats.beforeFirst();
int i=0;
@@ -440,20 +442,20 @@
cats.close()]]></programlisting>
<para>
- Notez qu'une connexion ouverte (et un curseur) est requise pour cette fonctionnalit�,
+ 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.
+ avez besoin d'une fonctionnalité de pagination hors ligne.
</para>
</sect3>
<sect3 id="objectstate-querying-executing-named">
- <title>Externaliser des requ�tes nomm�es</title>
+ <title>Externaliser des requêtes nommées</title>
<para>
- 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.)
+ 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.)
</para>
<programlisting><![CDATA[<query name="eg.DomesticCat.by.name.and.minimum.weight"><![CDATA[
@@ -463,7 +465,7 @@
] ]></query>]]></programlisting>
<para>
- La liaison de param�tres et l'ex�cution sont fait par programmation :
+ La liaison de paramètres et l'exécution sont fait par programmation :
</para>
<programlisting><![CDATA[Query q = sess.getNamedQuery("eg.DomesticCat.by.name.and.minimum.weight");
@@ -472,9 +474,9 @@
List cats = q.list();]]></programlisting>
<para>
- 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.
+ 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.
</para>
</sect3>
@@ -484,9 +486,9 @@
<sect2 id="objectstate-filtering" revision="1">
<title>Filtrer des collections</title>
<para>
- 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.
+ 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.
</para>
<programlisting><![CDATA[Collection blackKittens = session.createFilter(
@@ -497,15 +499,15 @@
);]]></programlisting>
<para>
- 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).
+ 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).
</para>
<para>
- 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.
+ 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.
</para>
<programlisting><![CDATA[Collection blackKittenMates = session.createFilter(
@@ -514,8 +516,8 @@
.list();]]></programlisting>
<para>
- M�me une requ�te de filtre vide est utile, par exemple pour charger un sous-ensemble
- d'�l�ments dans une �norme collection :
+ Même une requête de filtre vide est utile, par exemple pour charger un sous-ensemble
+ d'éléments dans une énorme collection :
</para>
<programlisting><![CDATA[Collection tenKittens = session.createFilter(
@@ -526,12 +528,12 @@
</sect2>
<sect2 id="objecstate-querying-criteria" revision="1">
- <title>Requ�tes Criteria</title>
+ <title>Requêtes Criteria</title>
<para>
- 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>
+ 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 :
</para>
@@ -541,18 +543,18 @@
List cats = crit.list();]]></programlisting>
<para>
- Les APIs <literal>Criteria</literal> et <literal>Example</literal> associ� sont
- trait�es plus en d�tail dans <xref linkend="querycriteria"/>.
+ Les APIs <literal>Criteria</literal> et <literal>Example</literal> associé sont
+ traitées plus en détail dans <xref linkend="querycriteria"/>.
</para>
</sect2>
<sect2 id="objectstate-querying-nativesql" revision="2">
- <title>Requ�tes en SQL natif</title>
+ <title>Requêtes en SQL natif</title>
<para>
- 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
+ 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 :
@@ -570,9 +572,9 @@
.list()]]></programlisting>
<para>
- 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"/>.
+ 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"/>.
</para>
</sect2>
@@ -583,13 +585,13 @@
<title>Modifier des objets persistants</title>
<para>
- 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
+ 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 :
</para>
@@ -599,45 +601,45 @@
sess.flush(); // changes to cat are automatically detected and persisted]]></programlisting>
<para>
- Parfois ce mod�le de programmation est inefficace puisqu'il n�cessiterait un
+ 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.
+ 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.
</para>
<para>
- <emphasis>Notez que Hibernate n'offre par sa propre API pour l'ex�cution directe
+ <emphasis>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
+ 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>
+ 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.</emphasis>
+ 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.</emphasis>
</para>
</sect1>
<sect1 id="objectstate-detached" revision="2">
- <title>Modifier des objets d�tach�s</title>
+ <title>Modifier des objets détachés</title>
<para>
- 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
+ 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.
+ 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.
</para>
<para>
- 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> :
+ 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> :
</para>
- <programlisting><![CDATA[// dans la premi�re session
+ <programlisting><![CDATA[// dans la première session
Cat cat = (Cat) firstSession.load(Cat.class, catId);
Cat potentialMate = new Cat();
firstSession.save(potentialMate);
@@ -650,64 +652,64 @@
secondSession.update(mate); // update mate]]></programlisting>
<para>
- 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.
+ 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.
</para>
<para>
- 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.
+ 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.
</para>
<para>
- 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>,
+ 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"/>.
</para>
<para>
- 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 !
+ 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 !
</para>
- <programlisting><![CDATA[//r�associe :
+ <programlisting><![CDATA[//réassocie :
sess.lock(fritz, LockMode.NONE);
-//fait une v�rification de version, puis r�associe :
+//fait une vérification de version, puis réassocie :
sess.lock(izi, LockMode.READ);
-//fait une v�rification de version, en utilisant SELECT ... FOR UPDATE, puis r�associe :
+//fait une vérification de version, en utilisant SELECT ... FOR UPDATE, puis réassocie :
sess.lock(pk, LockMode.UPGRADE);]]></programlisting>
<para>
- Notez que <literal>lock()</literal> peut �tre utilis� avec diff�rents
+ 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
+ sur la gestion des transactions pour plus d'informations. Le réattachement n'est pas le seul
cas d'utilisation pour <literal>lock()</literal>.
</para>
<para>
- D'autres mod�les pour de longues unit�s de travail sont trait�s dans <xref linkend="transactions-optimistic"/>.
+ D'autres modèles pour de longues unités de travail sont traités dans <xref linkend="transactions-optimistic"/>.
</para>
</sect1>
<sect1 id="objectstate-saveorupdate">
- <title>D�tection automatique d'un �tat</title>
+ <title>Détection automatique d'un état</title>
<para>
- 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�.
+ 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é.
</para>
- <programlisting><![CDATA[// dans la premi�re session
+ <programlisting><![CDATA[// dans la première session
Cat cat = (Cat) firstSession.load(Cat.class, catID);
// dans une partie plus haute de l'application
@@ -715,41 +717,41 @@
cat.setMate(mate);
// plus tard, dans une nouvelle session
-secondSession.saveOrUpdate(cat); // met � jour un �tat existant (cat a un identifiant non-null)
+secondSession.saveOrUpdate(cat); // met à jour un état existant (cat a un identifiant non-null)
secondSession.saveOrUpdate(mate); // sauvegarde les nouvelles instances (mate a un identiant null)]]></programlisting>
<para>
- 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
+ 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.
+ n'utiliseront jamais ces méthodes.
</para>
<para>
- G�n�ralement <literal>update()</literal> ou <literal>saveOrUpdate()</literal> sont utilis�es dans
- le sc�nario suivant :
+ Généralement <literal>update()</literal> ou <literal>saveOrUpdate()</literal> sont utilisées dans
+ le scénario suivant :
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- l'application charge un objet dans la premi�re session
+ l'application charge un objet dans la première session
</para>
</listitem>
<listitem>
<para>
- l'objet est pass� � la couche utilisateur
+ l'objet est passé à la couche utilisateur
</para>
</listitem>
<listitem>
<para>
- certaines modifications sont effectu�es sur l'objet
+ certaines modifications sont effectuées sur l'objet
</para>
</listitem>
<listitem>
<para>
- l'objet est retourn� � la couche logique m�tier
+ l'objet est retourné à la couche logique métier
</para>
</listitem>
<listitem>
@@ -767,65 +769,65 @@
<itemizedlist spacing="compact">
<listitem>
<para>
- si l'objet est d�j� persistant dans cette session, ne rien faire
+ si l'objet est déjà persistant dans cette session, ne rien faire
</para>
</listitem>
<listitem>
<para>
- si un autre objet associ� � la session a le m�me identifiant, lever une exception
+ si un autre objet associé à la session a le même identifiant, lever une exception
</para>
</listitem>
<listitem>
<para>
- si l'objet n'a pas de propri�t� d'identifiant, appeler <literal>save()</literal>
+ si l'objet n'a pas de propriété d'identifiant, appeler <literal>save()</literal>
</para>
</listitem>
<listitem>
<para>
- si l'identifiant de l'objet a une valeur assign�e � un objet nouvellement instanci�,
+ si l'identifiant de l'objet a une valeur assignée à un objet nouvellement instancié,
appeler <literal>save()</literal>
</para>
</listitem>
<listitem>
<para>
- 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
+ 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>
</para>
</listitem>
<listitem>
<para>
- sinon mettre � jour l'objet avec <literal>update()</literal>
+ sinon mettre à jour l'objet avec <literal>update()</literal>
</para>
</listitem>
</itemizedlist>
<para>
- et <literal>merge()</literal> est tr�s diff�rent :
+ et <literal>merge()</literal> est très différent :
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- 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
+ 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
</para>
</listitem>
<listitem>
<para>
- 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
+ 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
</para>
</listitem>
<listitem>
<para>
- l'instance persistante est retourn�e
+ l'instance persistante est retournée
</para>
</listitem>
<listitem>
<para>
- l'instance donn�e ne devient pas associ�e � la session, elle reste d�tach�e
+ l'instance donnée ne devient pas associée à la session, elle reste détachée
</para>
</listitem>
</itemizedlist>
@@ -836,40 +838,40 @@
<title>Suppression d'objets persistants</title>
<para>
- <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.
+ <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.
</para>
<programlisting><![CDATA[sess.delete(cat);]]></programlisting>
<para>
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
+ 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.
</para>
</sect1>
<sect1 id="objectstate-replicating" revision="1">
- <title>R�plication d'objets entre deux entrep�ts de donn�es</title>
+ <title>Réplication d'objets entre deux entrepôts de données</title>
<para>
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
+ et de les rendre persistantes dans un entrepôt différent, sans regénérer les valeurs
des identifiants.
</para>
- <programlisting><![CDATA[//r�cup�re un cat de la base de donn�es
+ <programlisting><![CDATA[//récupère un cat de la base de données
Session session1 = factory1.openSession();
Transaction tx1 = session1.beginTransaction();
Cat cat = session1.get(Cat.class, catId);
tx1.commit();
session1.close();
-// r�concilie la seconde base de donn�es
+// réconcilie la seconde base de données
Session session2 = factory2.openSession();
Transaction tx2 = session2.beginTransaction();
session2.replicate(cat, ReplicationMode.LATEST_VERSION);
@@ -877,41 +879,41 @@
session2.close();]]></programlisting>
<para>
- Le <literal>ReplicationMode</literal> d�termine comment <literal>replicate()</literal>
- traitera les conflits avec les lignes existantes dans la base de donn�es.
+ Le <literal>ReplicationMode</literal> détermine comment <literal>replicate()</literal>
+ traitera les conflits avec les lignes existantes dans la base de données.
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
<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
+ existante dans la base de données avec le même identifiant
</para>
</listitem>
<listitem>
<para>
- <literal>ReplicationMode.OVERWRITE</literal> - �crase n'importe quelle ligne existante
- dans la base de donn�es avec le m�me identifiant
+ <literal>ReplicationMode.OVERWRITE</literal> - écrase n'importe quelle ligne existante
+ dans la base de données avec le même identifiant
</para>
</listitem>
<listitem>
<para>
- <literal>ReplicationMode.EXCEPTION</literal> - l�ve une exception s'il y une ligne dans
- la base de donn�es avec le m�me identifiant
+ <literal>ReplicationMode.EXCEPTION</literal> - lève une exception s'il y une ligne dans
+ la base de données avec le même identifiant
</para>
</listitem>
<listitem>
<para>
- <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
+ <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
</para>
</listitem>
</itemizedlist>
<para>
- 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
+ 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.
</para>
@@ -921,44 +923,44 @@
<title>Flush de la session</title>
<para>
- 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
+ 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 :
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- lors de certaines ex�cutions de requ�te
+ lors de certaines exécutions de requête
</para>
</listitem>
<listitem>
<para>
- lors d'un appel � <literal>org.hibernate.Transaction.commit()</literal>
+ lors d'un appel à <literal>org.hibernate.Transaction.commit()</literal>
</para>
</listitem>
<listitem>
<para>
- lors d'un appel � <literal>Session.flush()</literal>
+ lors d'un appel à <literal>Session.flush()</literal>
</para>
</listitem>
</itemizedlist>
<para>
- Les expressions SQL sont effectu�es dans l'ordre suivant :
+ Les expressions SQL sont effectuées dans l'ordre suivant :
</para>
<orderedlist spacing="compact">
<listitem>
<para>
- insertion des entit�s, dans le m�me ordre que celui des
- objets correspondants sauvegard�s par l'appel � <literal>Session.save()</literal>
+ insertion des entités, dans le même ordre que celui des
+ objets correspondants sauvegardés par l'appel à <literal>Session.save()</literal>
</para>
</listitem>
<listitem>
<para>
- mise � jours des entit�s
+ mise à jours des entités
</para>
</listitem>
<listitem>
@@ -968,7 +970,7 @@
</listitem>
<listitem>
<para>
- suppression, mise � jour et insertion des �l�ments des collections
+ suppression, mise à jour et insertion des éléments des collections
</para>
</listitem>
<listitem>
@@ -978,54 +980,54 @@
</listitem>
<listitem>
<para>
- 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>
+ 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>
</para>
</listitem>
</orderedlist>
<para>
- (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.)
+ (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.)
</para>
<para>
- 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.
+ 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.
</para>
<para>
- 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 :
+ 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
+ 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"/>).
</para>
<programlisting><![CDATA[sess = sf.openSession();
Transaction tx = sess.beginTransaction();
-sess.setFlushMode(FlushMode.COMMIT); // permet aux requ�tes de retourner un �tat p�rim�
+sess.setFlushMode(FlushMode.COMMIT); // permet aux requêtes de retourner un état périmé
Cat izi = (Cat) sess.load(Cat.class, id);
izi.setName(iznizi);
-// pourrait retourner des donn�es p�rim�es
+// pourrait retourner des données périmées
sess.find("from Cat as cat left outer join cat.kittens kitten");
-// le changement pour izi n'est pas flush� !
+// le changement pour izi n'est pas flushé !
...
tx.commit(); // le flush se produit]]></programlisting>
<para>
- Durant le flush, une exception peut se produire (par exemple, si une op�ration de la
+ 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
+ compréhension du comportement transactionnel d'Hibernate, nous le traitons dans
<xref linkend="transactions"/>.
</para>
@@ -1035,59 +1037,59 @@
<title>Persistance transitive</title>
<para>
- 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 :
+ 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 :
</para>
<para>
- 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
+ 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.
+ 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.
</para>
<para>
- 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.
+ 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.
</para>
<para>
- Pour chaque op�ration basique de la session d'Hibernate - incluant <literal>persist(), merge(),
+ 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
+ opération soit cascadée le long d'une association, vous devez l'indiquer dans le document de
mapping. Par exemple :
</para>
<programlisting><![CDATA[<one-to-one name="person" cascade="persist"/>]]></programlisting>
<para>
- Les styles de cascade peuvent �tre combin�s :
+ Les styles de cascade peuvent être combinés :
</para>
<programlisting><![CDATA[<one-to-one name="person" cascade="persist,delete,lock"/>]]></programlisting>
<para>
- 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.
+ 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.
</para>
<para>
- 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.
+ 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.
</para>
@@ -1098,7 +1100,7 @@
<itemizedlist spacing="compact">
<listitem>
<para>
- Cela n'a g�n�ralement aucun sens d'activer la cascade sur une association
+ 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>.
@@ -1106,103 +1108,103 @@
</listitem>
<listitem>
<para>
- 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
+ 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>.
</para>
</listitem>
<listitem>
<para>
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
+ 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>.
</para>
</listitem>
</itemizedlist>
<para>
- Mapper une association (soit une simple association valu�e, soit une collection) avec
+ 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.
+ <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.
</para>
<para>
- 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
+ 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 :
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- Si un parent est pass� � <literal>persist()</literal>, tous les enfant sont pass�s �
+ Si un parent est passé à <literal>persist()</literal>, tous les enfant sont passés à
<literal>persist()</literal>
</para>
</listitem>
<listitem>
<para>
- Si un parent est pass� � <literal>merge()</literal>, tous les enfants sont pass�s �
+ Si un parent est passé à <literal>merge()</literal>, tous les enfants sont passés à
<literal>merge()</literal>
</para>
</listitem>
<listitem>
<para>
- Si un parent est pass� � <literal>save()</literal>, <literal>update()</literal> ou
- <literal>saveOrUpdate()</literal>, tous les enfants sont pass�s � <literal>saveOrUpdate()</literal>
+ Si un parent est passé à <literal>save()</literal>, <literal>update()</literal> ou
+ <literal>saveOrUpdate()</literal>, tous les enfants sont passés à <literal>saveOrUpdate()</literal>
</para>
</listitem>
<listitem>
<para>
- Si un enfant d�tach� ou �ph�m�re devient r�f�renc� par un parent persistant,
- il est pass� � <literal>saveOrUpdate()</literal>
+ Si un enfant détaché ou éphémère devient référencé par un parent persistant,
+ il est passé à <literal>saveOrUpdate()</literal>
</para>
</listitem>
<listitem>
<para>
- Si un parent est supprim�, tous les enfants sont pass�s � <literal>delete()</literal>
+ Si un parent est supprimé, tous les enfants sont passés à <literal>delete()</literal>
</para>
</listitem>
<listitem>
<para>
- 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�.
+ 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é.
</para>
</listitem>
</itemizedlist>
<para>
- 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
+ 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>.
</para>
</sect1>
<sect1 id="objectstate-metadata">
- <title>Utilisation des m�ta-donn�es</title>
+ <title>Utilisation des méta-données</title>
<para>
- 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).
+ 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).
</para>
<para>
- 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
+ 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>.
</para>
@@ -1213,7 +1215,7 @@
String[] propertyNames = catMeta.getPropertyNames();
Type[] propertyTypes = catMeta.getPropertyTypes();
-// r�cup�re une Map de toutes les propri�t�s qui ne sont pas des collections ou des associations
+// récupère une Map de toutes les propriétés qui ne sont pas des collections ou des associations
Map namedValues = new HashMap();
for ( int i=0; i<propertyNames.length; i++ ) {
if ( !propertyTypes[i].isEntityType() && !propertyTypes[i].isCollectionType() ) {
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/toolset_guide.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/toolset_guide.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/toolset_guide.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,85 +1,87 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="toolsetguide" revision="2">
<title>Guide des outils</title>
<para>
- 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
+ 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.
</para>
<para>
- 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 :
+ 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 :
</para>
<itemizedlist>
<listitem><para>
- <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.
+ <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.
</para></listitem>
<listitem><para>
<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.
+ 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.
</para></listitem>
<listitem><para>
<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.
+ 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.
</para></listitem>
<listitem><para>
- <emphasis>T�ches Ant :</emphasis>
+ <emphasis>Tâches Ant :</emphasis>
</para></listitem>
</itemizedlist>
<para>
- Veuillez-vous r�f�rer au paquet <emphasis>outils Hibernate</emphasis> et sa documentation pour plus d'informations.
+ Veuillez-vous référer au paquet <emphasis>outils Hibernate</emphasis> et sa documentation pour plus d'informations.
</para>
<para>
- 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) :
+ 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>.
</para>
<sect1 id="toolsetguide-s1" revision="2">
- <title>G�n�ration automatique du sch�ma</title>
+ <title>Génération automatique du schéma</title>
<para>
- 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.
+ 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.
</para>
<para>
- Vous <emphasis>devez</emphasis> sp�cifier un <literal>Dialect</literal> SQL via la propri�t�
+ 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.
+ fortement dépendante de la base de données.
</para>
<para>
- D'abord, personnalisez vos fichiers de mapping pour am�liorer le sch�ma g�n�r�.
+ D'abord, personnalisez vos fichiers de mapping pour améliorer le schéma généré.
</para>
<sect2 id="toolsetguide-s1-2" revision="3">
- <title>Personnaliser le sch�ma</title>
+ <title>Personnaliser le schéma</title>
<para>
- 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.
+ 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.
</para>
<programlisting><![CDATA[<property name="zip" length="5"/>]]></programlisting>
<programlisting><![CDATA[<property name="balance" precision="12" scale="2"/>]]></programlisting>
<para>
- 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
+ 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>).
</para>
@@ -87,10 +89,10 @@
<programlisting><![CDATA[<element column="serialNumber" type="long" not-null="true" unique="true"/>]]></programlisting>
<para>
- 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
+ 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.
</para>
<programlisting><![CDATA[<many-to-one name="org" column="orgId" unique-key="OrgEmployeeId"/>
@@ -98,8 +100,8 @@
<para>
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
+ 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.
</para>
@@ -107,14 +109,14 @@
<property name="firstName" index="CustName"/>]]></programlisting>
<para>
- Un attribut <literal>foreign-key</literal> peut �tre utilis� pour surcharger le nom
- des cl�s �trang�res g�n�r�es.
+ Un attribut <literal>foreign-key</literal> peut être utilisé pour surcharger le nom
+ des clés étrangères générées.
</para>
<programlisting><![CDATA[<many-to-one name="bar" column="barId" foreign-key="FKFooBar"/>]]></programlisting>
<para>
- Plusieurs �l�ments de mapping acceptent aussi un �l�ment fils <literal><column></literal>.
+ Plusieurs éléments de mapping acceptent aussi un élément fils <literal><column></literal>.
Ceci est utile pour les type multi-colonnes:
</para>
@@ -125,9 +127,9 @@
</property>]]></programlisting>
<para>
- 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).
+ 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).
</para>
<programlisting><![CDATA[<property name="credits" type="integer" insert="false">
@@ -140,7 +142,7 @@
<para>
L'attribut <literal>sql-type</literal> laisse l'utilisateur surcharger le mapping
- par d�faut du type Hibernate vers un type SQL.
+ par défaut du type Hibernate vers un type SQL.
</para>
<programlisting><![CDATA[<property name="balance" type="float">
@@ -149,7 +151,7 @@
<para>
- L'attribut <literal>check</literal> permet de sp�cifier une contrainte de v�rification.
+ L'attribut <literal>check</literal> permet de spécifier une contrainte de vérification.
</para>
<programlisting><![CDATA[<property name="foo" type="integer">
@@ -172,53 +174,53 @@
<row>
<entry>Attribut</entry>
<entry>Valeur</entry>
- <entry>Interpr�tation</entry>
+ <entry>Interprétation</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>length</literal></entry>
- <entry>num�rique</entry>
+ <entry>numérique</entry>
<entry>taille d'une colonne</entry>
</row>
<row>
<entry><literal>precision</literal></entry>
- <entry>num�rique</entry>
- <entry>pr�cision d�cimale de la colonne</entry>
+ <entry>numérique</entry>
+ <entry>précision décimale de la colonne</entry>
</row>
<row>
<entry><literal>scale</literal></entry>
- <entry>num�rique</entry>
- <entry>scale d�cimale de la colonne</entry>
+ <entry>numérique</entry>
+ <entry>scale décimale de la colonne</entry>
</row>
<row>
<entry><literal>not-null</literal></entry>
<entry><literal>true|false</literal></entry>
- <entry>sp�cifie que la colonne doit �tre non-nulle</entry>
+ <entry>spécifie que la colonne doit être non-nulle</entry>
</row>
<row>
<entry><literal>unique</literal></entry>
<entry><literal>true|false</literal></entry>
- <entry>sp�cifie que la colonne doit avoir une contrainte d'unicit�</entry>
+ <entry>spécifie que la colonne doit avoir une contrainte d'unicité</entry>
</row>
<row>
<entry><literal>index</literal></entry>
<entry><literal>index_name</literal></entry>
- <entry>sp�cifie le nom d'un index (multi-colonnes)</entry>
+ <entry>spécifie le nom d'un index (multi-colonnes)</entry>
</row>
<row>
<entry><literal>unique-key</literal></entry>
<entry><literal>unique_key_name</literal></entry>
- <entry>sp�cifie le nom d'une contrainte d'unicit� multi-colonnes</entry>
+ <entry>spécifie le nom d'une contrainte d'unicité multi-colonnes</entry>
</row>
<row>
<entry><literal>foreign-key</literal></entry>
<entry><literal>foreign_key_name</literal></entry>
<entry>
- 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
+ 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>
+ Notez que les extrêmités <literal>inverse="true"</literal>
se seront pas prises en compte par <literal>SchemaExport</literal>.
</entry>
</row>
@@ -226,22 +228,22 @@
<entry><literal>sql-type</literal></entry>
<entry><literal>SQL column_type</literal></entry>
<entry>
- surcharge le type par d�faut (attribut de
- l'�l�ment <literal><column></literal> uniquement)
+ surcharge le type par défaut (attribut de
+ l'élément <literal><column></literal> uniquement)
</entry>
</row>
<row>
<entry><literal>default</literal></entry>
<entry>expression SQL</entry>
<entry>
- sp�cifie une valeur par d�faut pour la colonne
+ spécifie une valeur par défaut pour la colonne
</entry>
</row>
<row>
<entry><literal>check</literal></entry>
<entry>SQL expression</entry>
<entry>
- cr�e une contrainte de v�rification sur la table ou la colonne
+ crée une contrainte de vérification sur la table ou la colonne
</entry>
</row>
</tbody>
@@ -249,7 +251,7 @@
</table>
<para>
- L'�l�ment <literal><comment></literal> vous permet de sp�cifier un commentaire pour le sch�ma g�n�r�.
+ L'élément <literal><comment></literal> vous permet de spécifier un commentaire pour le schéma généré.
</para>
<programlisting><![CDATA[<class name="Customer" table="CurCust">
@@ -264,19 +266,19 @@
</property>]]></programlisting>
<para>
- Ceci a pour r�sultat une expression
+ 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).
+ <literal>comment on column</literal> dans la DDL générée (où supportée).
</para>
</sect2>
<sect2 id="toolsetguide-s1-3" revision="2">
- <title>Ex�cuter l'outil</title>
+ <title>Exécuter l'outil</title>
<para>
- L'outil <literal>SchemaExport</literal> g�n�re un script DDL vers
- la sortie standard et/ou ex�cute les ordres DDL.
+ L'outil <literal>SchemaExport</literal> génère un script DDL vers
+ la sortie standard et/ou exécute les ordres DDL.
</para>
<para>
@@ -298,7 +300,7 @@
<tbody>
<row>
<entry><literal>--quiet</literal></entry>
- <entry>ne pas �crire le script vers la sortie standard</entry>
+ <entry>ne pas écrire le script vers la sortie standard</entry>
</row>
<row>
<entry><literal>--drop</literal></entry>
@@ -306,42 +308,42 @@
</row>
<row>
<entry><literal>--create</literal></entry>
- <entry>ne cr�� que les tables</entry>
+ <entry>ne créé que les tables</entry>
</row>
<row>
<entry><literal>--text</literal></entry>
- <entry>ne pas ex�cuter sur la base de donn�es</entry>
+ <entry>ne pas exécuter sur la base de données</entry>
</row>
<row>
<entry><literal>--output=my_schema.ddl</literal></entry>
- <entry>�crit le script ddl vers un fichier</entry>
+ <entry>écrit le script ddl vers un fichier</entry>
</row>
<row>
<entry><literal>--naming=eg.MyNamingStrategy</literal></entry>
- <entry>s�lectionne une <literal>NamingStrategy</literal></entry>
+ <entry>sélectionne une <literal>NamingStrategy</literal></entry>
</row>
<row>
<entry><literal>--config=hibernate.cfg.xml</literal></entry>
- <entry>lit la configuration Hibernate � partir d'un fichier XML</entry>
+ <entry>lit la configuration Hibernate à partir d'un fichier XML</entry>
</row>
<row>
<entry><literal>--properties=hibernate.properties</literal></entry>
- <entry>lit les propri�t�s de la base de donn�es � partir d'un fichier</entry>
+ <entry>lit les propriétés de la base de données à partir d'un fichier</entry>
</row>
<row>
<entry><literal>--format</literal></entry>
- <entry>formatte proprement le SQL g�n�r� dans le script</entry>
+ <entry>formatte proprement le SQL généré dans le script</entry>
</row>
<row>
<entry><literal>--delimiter=x</literal></entry>
- <entry>param�tre un d�limiteur de fin de ligne pour le script</entry>
+ <entry>paramètre un délimiteur de fin de ligne pour le script</entry>
</row>
</tbody>
</tgroup>
</table>
<para>
- Vous pouvez m�me int�grer <literal>SchemaExport</literal> dans votre application :
+ Vous pouvez même intégrer <literal>SchemaExport</literal> dans votre application :
</para>
<programlisting><![CDATA[Configuration cfg = ....;
@@ -350,26 +352,26 @@
</sect2>
<sect2 id="toolsetguide-s1-4">
- <title>Propri�t�s</title>
+ <title>Propriétés</title>
<para>
- Les propri�t�s de la base de donn�es peuvent �tre sp�cifi�es
+ Les propriétés de la base de données peuvent être spécifiées
</para>
<itemizedlist spacing="compact">
<listitem>
- <para>comme propri�t�s syst�me avec <literal>-D</literal><emphasis><property></emphasis></para>
+ <para>comme propriétés système avec <literal>-D</literal><emphasis><property></emphasis></para>
</listitem>
<listitem>
<para>dans <literal>hibernate.properties</literal></para>
</listitem>
<listitem>
- <para>dans un fichier de propri�t�s d�clar� avec <literal>--properties</literal></para>
+ <para>dans un fichier de propriétés déclaré avec <literal>--properties</literal></para>
</listitem>
</itemizedlist>
<para>
- Les propri�t�s n�cessaires sont :
+ Les propriétés nécessaires sont :
</para>
<table frame="topbot">
@@ -379,7 +381,7 @@
<colspec colwidth="2*"/>
<thead>
<row>
- <entry>Nom de la propri�t�</entry>
+ <entry>Nom de la propriété</entry>
<entry>Description</entry>
</row>
</thead>
@@ -394,7 +396,7 @@
</row>
<row>
<entry><literal>hibernate.connection.username</literal></entry>
- <entry>utilisateur de la base de donn�es</entry>
+ <entry>utilisateur de la base de données</entry>
</row>
<row>
<entry><literal>hibernate.connection.password</literal></entry>
@@ -439,12 +441,12 @@
</sect2>
<sect2 id="toolsetguide-s1-6" revision="2">
- <title>Mises � jour incr�mentales du sch�ma</title>
+ <title>Mises à jour incrémentales du schéma</title>
<para>
- 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
+ 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.
</para>
@@ -467,11 +469,11 @@
<tbody>
<row>
<entry><literal>--quiet</literal></entry>
- <entry>ne pas �crire vers la sortie standard</entry>
+ <entry>ne pas écrire vers la sortie standard</entry>
</row>
<row>
<entry><literal>--text</literal></entry>
- <entry>ne pas exporter vers la base de donn�es</entry>
+ <entry>ne pas exporter vers la base de données</entry>
</row>
<row>
<entry><literal>--naming=eg.MyNamingStrategy</literal></entry>
@@ -479,14 +481,14 @@
</row>
<row>
<entry><literal>--properties=hibernate.properties</literal></entry>
- <entry>lire les propri�t�s de la base de donn�es � partir d'un fichier</entry>
+ <entry>lire les propriétés de la base de données à partir d'un fichier</entry>
</row>
</tbody>
</tgroup>
</table>
<para>
- Vous pouvez int�grer <literal>SchemaUpdate</literal> dans votre application :
+ Vous pouvez intégrer <literal>SchemaUpdate</literal> dans votre application :
</para>
<programlisting><![CDATA[Configuration cfg = ....;
@@ -495,7 +497,7 @@
</sect2>
<sect2 id="toolsetguide-s1-7">
- <title>Utiliser Ant pour des mises � jour de sch�ma par incr�ment</title>
+ <title>Utiliser Ant pour des mises à jour de schéma par incrément</title>
<para>
Vous pouvez appeler <literal>SchemaUpdate</literal> depuis le script Ant :
@@ -516,12 +518,12 @@
</target>]]></programlisting>
<sect2 id="toolsetguide-s1-8" revision="1">
- <title>Validation du sch�ma</title>
+ <title>Validation du schéma</title>
<para>
- 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.
+ 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.
</para>
<para>
@@ -547,7 +549,7 @@
</row>
<row>
<entry><literal>--properties=hibernate.properties</literal></entry>
- <entry>lit les propri�t�s dela base de donn�es depuis un fichier de propri�t�s</entry>
+ <entry>lit les propriétés dela base de données depuis un fichier de propriétés</entry>
</row>
<row>
<entry><literal>--config=hibernate.cfg.xml</literal></entry>
@@ -568,7 +570,7 @@
</sect2>
<sect2 id="toolsetguide-s1-9">
- <title>Utiliser Ant pour la validation du Sch�ma</title>
+ <title>Utiliser Ant pour la validation du Schéma</title>
<para>
Vous pouvez appeler <literal>SchemaValidator</literal> depuis le script Ant:
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/transactions.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/transactions.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/transactions.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,129 +1,131 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="transactions" revision="2">
- <title>Transactions et acc�s concurrents</title>
+ <title>Transactions et accès concurrents</title>
<para>
- 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.
+ 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.
</para>
<para>
- 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).
+ 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).
</para>
<para>
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 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.
+ et cette API seront détaillés plus tard dans ce chapitre.
</para>
<para>
- 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
+ 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.
</para>
<sect1 id="transactions-basics" revision="1">
- <title>Gestion de session et d�limitation de transactions</title>
+ <title>Gestion de session et délimitation de transactions</title>
- <para>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.
+ <para>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.
</para>
- <para>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
+ <para>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.
+ JDBC (ou de <literal>Datasource</literal> ) si ce n'est pas nécessaire.
</para>
- <para>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.
+ <para>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.
</para>
- <para>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?
+ <para>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?
</para>
<sect2 id="transactions-basics-uow" revision="1">
- <title>Unit� de travail</title>
+ <title>Unité de travail</title>
<para>
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.
+ <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.
</para>
<para>
- Le pattern d'utilisation le plus fr�quemment rencontr� dans des applications clients serveur
+ 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 attentes de la grande majorit� des
+ (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 attentes de la grande majorité des
applications.
</para>
<para>
- Le d�fi r�side dans l'impl�mentation. Hibernate fournit une fonction de gestion de
+ 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.
+ 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.
</para>
<para>
- 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�
+ 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"/>.
</para>
<para>
- 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,
+ 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
+ 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..
</para>
@@ -134,113 +136,113 @@
<para>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:
+ 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:
</para>
<itemizedlist>
<listitem>
- <para>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.
+ <para>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.
</para>
</listitem>
<listitem>
- <para>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
+ <para>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.</para>
</listitem>
</itemizedlist>
- <para>Ceci s'appelle une unit� de travail. Du point de vue de l'utilisateur: une
+ <para>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.
+ Il y a plusieurs façon de mettre ceci en place dans votre application.
</para>
- <para>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.
+ <para>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.
</para>
- <para>Il appara�t donc �vident qu'il faille utiliser plusieurs transactions BDD afin d'impl�menter la
+ <para>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
+ 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:
+ données. Ceci est relativement facile à mettre en place, surtout avec l'utilisation de certaines
+ fonctionnalités d'Hibernate:
</para>
<itemizedlist>
<listitem>
<para>
<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.
+ - 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.
</para>
</listitem>
<listitem>
<para>
- <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>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.
+ (littéralement: session- par-requête-avec-objets-détachés). Le versionnage automatique est
+ utilisé afin d'isoler les modifications concurrentes.
</para>
</listitem>
<listitem>
<para>
<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
+ <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.
+ (Littéralement: session-par- conversation) et rend superflu le rattachement des
+ objets. Le versionnage automatique est utilisé afin d'isoler les modifications concurrentes.
</para>
</listitem>
</itemizedlist>
<para>Les deux patterns
<emphasis>session-per-request-with- detached- objects</emphasis>
- (session-par-requ�te-avec-objets- d�tach�s) et
+ (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.
+ (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.
</para>
</sect2>
<sect2 id="transactions-basics-identity">
- <title>L'identit� des objets</title>
+ <title>L'identité des objets</title>
- <para>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
+ <para>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:
+ <literal>Session</literal> . Il existe donc deux notions de l'identité d'un objet:
</para>
<variablelist spacing="compact">
<varlistentry>
- <term>Identit� BD</term>
+ <term>Identité BD</term>
<listitem>
<para>
<literal>foo.getId().equals( bar.getId() )</literal> </para>
</listitem>
</varlistentry>
<varlistentry>
- <term>Identit� JVM</term>
+ <term>Identité JVM</term>
<listitem>
<para>
<literal>foo==bar</literal> </para>
@@ -248,101 +250,101 @@
</varlistentry>
</variablelist>
- <para>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
+ <para>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�.
+ <literal>Transaction.commit()</literal> est appelé.
</para>
- <para>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
+ <para>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>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.
</para>
<para>
- 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 immuables. Les identifiants de base de donn�es vont changer si un objet transitoire
+ 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 immuables. 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
+ 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.
</para>
</sect2>
<sect2 id="transactions-basics-issues">
- <title>Probl�mes communs</title>
+ <title>Problèmes communs</title>
- <para>Bien qu'il puisse y avoir quelques rares exceptions � cette r�gle, il est recommand� de ne jamais utiliser
+ <para>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.
+ . 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.
</para>
<itemizedlist>
<listitem>
<para>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
+ <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> 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> .
</para>
</listitem>
<listitem>
- <para>Lorsque Hibernate lance une exception, le roll back de la transaction en cours doit �tre effectu�
+ <para>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�.)
+ <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é.)
</para>
</listitem>
<listitem>
<para>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
+ <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</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 :
+ <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.
+ <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.
</para>
</listitem>
</itemizedlist>
@@ -351,42 +353,42 @@
</sect1>
<sect1 id="transactions-demarcation">
- <title>D�marcation des transactions</title>
+ <title>Démarcation des transactions</title>
- <para>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.</para>
+ <para>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.</para>
- <para>Une application utilisant Hibernate peut s'ex�cuter dans un environnement l�ger n?offrant pas la gestion
+ <para>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 �
+ 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�ploiement d'EJB Session, par exemple. La gestion programmatique des transactions n'y
- est donc pas n�cessaire. M�me les appels �
+ niveau du container J2EE. Les bornes de transaction peuvent normalement être définies de manière déclarative
+ dans les descripteurs de déploiement 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.
</para>
- <para>Il peut �tre requis d'avoir une couche de persistance portable. Hibernate offre donc une API appel�e
+ <para>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).
+ 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).
</para>
- <para>Il existe quatre �tapes disctinctes lors de la fermeture d'une
+ <para>Il existe quatre étapes disctinctes lors de la fermeture d'une
<literal>Session</literal>
</para>
@@ -405,17 +407,17 @@
</listitem>
</itemizedlist>
- <para>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.</para>
+ <para>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.</para>
<sect2 id="transactions-demarcation-nonmanaged" revision="2">
- <title>Environnement non manag�</title>
+ <title>Environnement non managé</title>
<para>
- 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:</para>
+ 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:</para>
<programlisting><![CDATA[// Non-managed environment idiom
Session sess = factory.openSession();
@@ -437,16 +439,16 @@
}]]></programlisting>
<para>
- 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</xref>
- 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.
+ 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</xref>
+ 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.
</para>
<para>
Une solution plus flexible est la gestion par contexte fourni par Hibernate que nous avons
- d�j� rencontr�:
+ déjà rencontré:
</para>
<programlisting><![CDATA[// Non-managed environment idiom with getCurrentSession()
@@ -465,18 +467,18 @@
<para>
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.
+ 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.
</para>
<para>
- Notez que vous devriez s�lectionner <literal>org.hibernate.transaction.JDBCTransactionFactory</literal>
- (le d�faut), pour le second exemple <literal>"thread"</literal> comme
+ 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>.
</para>
@@ -485,13 +487,13 @@
<sect2 id="transactions-demarcation-jta" revision="2">
<title>Utilisation de JTA</title>
- <para>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.</para>
+ <para>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.</para>
<para>
- 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> .
+ 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.
</para>
@@ -531,8 +533,8 @@
}]]></programlisting>
<para>
- 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:
+ 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:
</para>
<programlisting><![CDATA[// CMT idiom
@@ -543,31 +545,31 @@
]]></programlisting>
<para>
- 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 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>
</para>
<para>
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
+ <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).
+ 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).
</para>
<para>
- 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
+ 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
+ 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
+ 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.)
</para>
@@ -578,33 +580,33 @@
<para>
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 �
+ 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> .
</para>
<para>
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.
+ 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.
</para>
<para>
- Hibernate englobe les <literal>SQLException</literal> s lanc�es lors des interactions directes avec la base de donn�es
+ 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:
+ 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:
</para>
<itemizedlist spacing="compact">
@@ -615,22 +617,22 @@
</listitem>
<listitem>
<para>
- <literal>SQLGrammarException</literal> - Indique un probl�me de grammaire ou de syntaxe avec la requ�te SQL envoy�e.
+ <literal>SQLGrammarException</literal> - Indique un problème de grammaire ou de syntaxe avec la requête SQL envoyée.
</para>
</listitem>
<listitem>
<para>
- <literal>ConstraintViolationException</literal> - Indique une violation de contrainte d'int�grit�.
+ <literal>ConstraintViolationException</literal> - Indique une violation de contrainte d'intégrité.
</para>
</listitem>
<listitem>
<para>
- <literal>LockAcquisitionException</literal> - Indique une erreur de verrouillage lors de l'�x�cution de la requ�te.
+ <literal>LockAcquisitionException</literal> - Indique une erreur de verrouillage lors de l'éxécution de la requête.
</para>
</listitem>
<listitem>
<para>
- <literal>GenericJDBCException</literal> - Indique une erreur g�n�rique JDBC d'une autre cat�gorie.
+ <literal>GenericJDBCException</literal> - Indique une erreur générique JDBC d'une autre catégorie.
</para>
</listitem>
</itemizedlist>
@@ -641,20 +643,20 @@
<title>Timeout de transaction</title>
<para>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
+ 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> .
</para>
<programlisting><![CDATA[
Session sess = factory.openSession();
try {
- //mettre le timeout � 3 secondes.
+ //mettre le timeout à 3 secondes.
sess.getTransaction().setTimeout(3);
sess.getTransaction().begin();
@@ -675,8 +677,8 @@
<para>
- 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.
+ 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.
</para>
</sect2>
@@ -684,34 +686,34 @@
</sect1>
<sect1 id="transactions-optimistic">
- <title>Contr�le de consurrence optimiste</title>
+ <title>Contrôle de consurrence optimiste</title>
- <para>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 �
+ <para>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.</para>
<sect2 id="transactions-optimistic-manual">
<title>Gestion du versionnage au niveau applicatif</title>
- <para>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.
+ <para>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.
</para>
<programlisting>
- <![CDATA[// foo est une instance charg�e ant�rieurement par une autre
+ <![CDATA[// foo est une instance chargée antérieurement par une autre
Session session = factory.openSession();
Transaction t = session.beginTransaction();
int oldVersion = foo.getVersion();
- session.load( foo, foo.getKey() ); // Charger l'�tat courant
+ session.load( foo, foo.getKey() ); // Charger l'état courant
if ( oldVersion != foo.getVersion() )
throw new StaleObjectStateException();
@@ -720,26 +722,26 @@
t.commit();
session.close();]]></programlisting>
- <para>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.
+ <para>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.
</para>
- <para>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
+ <para>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.
+ (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.
</para>
- <para>Il est clair que la gestion manuelle de la v�rification du versionnage des objets ne peut �tre effectu�e
+ <para>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
+ 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.</para>
</sect2>
@@ -747,87 +749,87 @@
<sect2 id="transactions-optimistic-longsession">
<title>Les sessions longues et le versionnage automatique.</title>
- <para>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
+ <para>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.
+ 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.
</para>
- <para>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.
+ <para>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.
</para>
<programlisting>
- <![CDATA[// foo est une instance charg�e ant�rieurement par une autre session
+ <![CDATA[// foo est une instance chargée antérieurement par une autre session
session.reconnect();// Obtention d'une nouvelle connexion JDBC
Transaction t = session.beginTransaction();
foo.setProperty("bar");
- t.commit(); //Terminer la transaction, propager les changements et v�rifier les versions.
+ t.commit(); //Terminer la transaction, propager les changements et vérifier les versions.
session.disconnect(); // Retourner la connexion JDBC
]]></programlisting>
- <para>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.
+ <para>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.
</para>
- <para>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> .
+ <para>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> .
</para>
- <para>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.
+ <para>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.
</para>
- <para>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
+ <para>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> .)
</para>
</sect2>
<sect2 id="transactions-optimistic-detached">
- <title>Les objets d�tach�s et le versionnage automatique</title>
+ <title>Les objets détachés et le versionnage automatique</title>
- <para>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>
+ <para>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> .
</para>
<programlisting>
- <![CDATA[// foo est une instance charg�e ant�rieurement par une autre session
+ <![CDATA[// foo est une instance chargée antérieurement par une autre session
foo.setProperty("bar");
session = factory.openSession();
Transaction t = session.beginTransaction();
- session.saveOrUpdate(foo); //Utiliser merge() si "foo" pourrait avoir �t� charg� pr�c�dement
+ session.saveOrUpdate(foo); //Utiliser merge() si "foo" pourrait avoir été chargé précédement
t.commit();
session.close();]]> </programlisting>
- <para>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.</para>
+ <para>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.</para>
- <para>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�.
+ <para>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é.
</para>
</sect2>
@@ -835,40 +837,40 @@
<sect2 id="transactions-optimistic-customizing">
<title>Personnaliser le versionnage automatique</title>
- <para>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.
+ <para>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.
</para>
- <para>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�.
+ <para>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 <literal>session-per-request-with-detached- objects</literal> devient alors impossible.
</para>
- <para>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().
+ <para>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().
</para>
- <para>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�
+ <para>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
+ 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'assurer que l'entit� doit r�ellement �tre
- actualis�e avant de lancer la commande d'UPDATE.
+ 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'assurer que l'entité doit réellement être
+ actualisée avant de lancer la commande d'UPDATE.
</para>
</sect2>
@@ -878,19 +880,19 @@
<sect1 id="transactions-locking">
<title>Verouillage pessimiste</title>
- <para>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
+ <para>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.</para>
- <para>Hibernate utilisera toujours le m�canisme de verrouillage de la base de donn�es et ne verrouillera jamais les
- objets en m�moire!</para>
+ <para>Hibernate utilisera toujours le mécanisme de verrouillage de la base de données et ne verrouillera jamais les
+ objets en mémoire!</para>
<para>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:
+ définit les différents niveaux de verrouillage pouvant être obtenus par Hibernate. Le verrouillage est obtenu
+ par les mécanismes suivants:
</para>
<itemizedlist spacing="compact">
@@ -901,48 +903,48 @@
</listitem>
<listitem>
<para>
- <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.
+ <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.
</para>
</listitem>
<listitem>
<para>
- <literal>LockMode.UPGRADE_NOWAIT</literal> peut �tre obtenu de mani�re explicite en utilisant
+ <literal>LockMode.UPGRADE_NOWAIT</literal> peut être obtenu de manière explicite en utilisant
<literal>SELECT ... FOR UPDATE NOWAIT</literal> sur Oracle.
</para>
</listitem>
<listitem>
<para>
- <literal>LockMode.READ</literal> est obtenu automatiquement quand Hibernate lit des donn�es dans un contexte d'isolation
+ <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.
+ <literal>Serializable</literal> . Peut être réobtenu explicitement via une requête.
</para>
</listitem>
<listitem>
<para>
- <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.
+ <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.
</para>
</listitem>
</itemizedlist>
- <para>Les niveaux de verrouillage peuvent �tre explicitement obtenus de l'une des mani�res suivantes:</para>
+ <para>Les niveaux de verrouillage peuvent être explicitement obtenus de l'une des manières suivantes:</para>
<itemizedlist spacing="compact">
<listitem>
- <para>Un appel �
- <literal>Session.load()</literal> , en sp�cifiant un niveau verrouillage
+ <para>Un appel à
+ <literal>Session.load()</literal> , en spécifiant un niveau verrouillage
<literal>LockMode</literal> .
</para>
</listitem>
<listitem>
- <para>Un appel �
+ <para>Un appel à
<literal>Session.lock()</literal> .
</para>
</listitem>
<listitem>
- <para>Une appel �
+ <para>Une appel à
<literal>Query.setLockMode()</literal> .
</para>
</listitem>
@@ -950,23 +952,23 @@
<para>Si
<literal>Session.load()</literal>
- est appel� avec le param�tre de niveau de verouillage
+ 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
+ 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
+ . 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
+ 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.
</para>
<para>
<literal>Session.lock()</literal>
- effectue une v�rification de version si le niveau de verrouillage est
+ effectue une vérification de version si le niveau de verrouillage est
<literal>READ</literal>
,
<literal>UPGRADE</literal>
@@ -976,94 +978,94 @@
<literal>UPGRADE</literal>
ou
<literal>UPGRADE_NOWAIT</literal>
- , une requ�te
+ , une requête
<literal>SELECT ... FOR UPDATE</literal>
- sera utilis�e.)
+ sera utilisée.)
</para>
- <para>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
+ <para>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.</para>
</sect1>
<sect1 id="transactions-connection-release">
- <title>Mode de lib�ration de Connection</title>
+ <title>Mode de libération de Connection</title>
<para>
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>:
+ é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>:
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- <literal>ON_CLOSE</literal> - est essentiellement le comportement pass�.
+ <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.
+ jusqu'à ce que la session se ferme.
</para>
</listitem>
<listitem>
<para>
- <literal>AFTER_TRANSACTION</literal> - indique de relacher la connexion apr�s qu'une
- <literal>org.hibernate.Transaction</literal> se soit achev�e.
+ <literal>AFTER_TRANSACTION</literal> - indique de relacher la connexion après qu'une
+ <literal>org.hibernate.Transaction</literal> se soit achevée.
</para>
</listitem>
<listitem>
<para>
- <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
+ <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>.
</para>
</listitem>
</itemizedlist>
<para>
- 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:
+ 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:
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- <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>
+ <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.
+ 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.
</para>
</listitem>
<listitem>
<para>
- <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�.
+ <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é.
</para>
</listitem>
<listitem>
<para>
<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.
+ 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.
</para>
</listitem>
<listitem>
<para>
<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.
+ 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.
</para>
</listitem>
</itemizedlist>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/tutorial.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/tutorial.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/tutorial.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,53 +1,55 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="tutorial">
- <title>Introduction � Hibernate</title>
+ <title>Introduction à Hibernate</title>
<sect1 id="tutorial-intro" revision="1">
- <title>Pr�face</title>
+ <title>Préface</title>
<para>
- 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.
+ 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.
</para>
<para>
- 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.
+ 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.
</para>
<para>
- Le code source de ce tutoriel est inclus dans la distribution dans le r�pertoire
+ Le code source de ce tutoriel est inclus dans la distribution dans le répertoire
<literal>doc/reference/tutorial/</literal>.
</para>
</sect1>
<sect1 id="tutorial-firstapp" revision="1">
- <title>Partie 1 - Premi�re application Hibernate</title>
+ <title>Partie 1 - Première application Hibernate</title>
<para>
- 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.
+ 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.
</para>
<para>
- 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.
+ 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.
</para>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[.
@@ -65,25 +67,25 @@
log4j.jar ]]></programlisting>
<para>
- 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.)
+ 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.)
</para>
<para>
- Ensuite, nous cr�ons une classe qui r�pr�sente l'�v�nement que nous voulons
- stocker dans notre base de donn�es.
+ Ensuite, nous créons une classe qui réprésente l'événement que nous voulons
+ stocker dans notre base de données.
</para>
<sect2 id="tutorial-firstapp-firstclass" revision="1">
- <title>La premi�re classe</title>
+ <title>La première classe</title>
<para>
- Notre premi�re classe persistante est une simple classe JavaBean avec
- quelques propri�t�s :
+ Notre première classe persistante est une simple classe JavaBean avec
+ quelques propriétés :
</para>
<programlisting><![CDATA[package events;
@@ -125,51 +127,51 @@
<para>
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 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.
</para>
<para>
- 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
+ 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 � la conception de votre application.
+ 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 à la conception de votre application.
</para>
<para>
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
+ 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.
</para>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[.
+lib
- <Hibernate et biblioth�ques tierces>
+ <Hibernate et bibliothèques tierces>
+src
+events
Event.java]]></programlisting>
<para>
- Dans la prochaine �tape, nous informons Hibernate de cette classe persistante.
+ Dans la prochaine étape, nous informons Hibernate de cette classe persistante.
</para>
</sect2>
@@ -179,13 +181,13 @@
<para>
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.
+ 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.
</para>
<para>
- La structure basique de ce fichier de mapping ressemble � �a :
+ La structure basique de ce fichier de mapping ressemble à ça :
</para>
<programlisting><![CDATA[<?xml version="1.0"?>
@@ -198,29 +200,29 @@
</hibernate-mapping>]]></programlisting>
<para>
- 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
+ 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
+ ainsi que dans le répertoire <literal>src</literal> de la distribution
Hibernate.
</para>
<para>
- Nous omettrons la d�claration de la DTD dans les exemples futurs pour
- raccourcir le code. Bien s�r il n'est pas optionnel.
+ Nous omettrons la déclaration de la DTD dans les exemples futurs pour
+ raccourcir le code. Bien sûr il n'est pas optionnel.
</para>
<para>
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 :
+ é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 :
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -232,13 +234,13 @@
</hibernate-mapping>]]></programlisting>
<para>
- Plus loin, nous disons � Hibernate comment persister et charger un objet de la classe
+ 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
+ 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 :
+ stratégie de génération d'identifiant d'Hibernate pour la colonne de la clef primaire
+ subrogée :
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -252,22 +254,22 @@
</hibernate-mapping>]]></programlisting>
<para>
- 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).
+ 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).
</para>
<para>
- 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
+ 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 :
</para>
@@ -285,50 +287,50 @@
</hibernate-mapping>]]></programlisting>
<para>
- 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
+ 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.
</para>
<para>
- Pourquoi le mapping de la propri�t� <literal>date</literal> inclut
+ 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
+ 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.
+ réservé dans la plupart des bases de données, donc nous utilisons un nom
+ différent pour le mapping.
</para>
<para>
- 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
+ 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
+ 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
+ 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
<literal>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>.
+ 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>.
</para>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[.
+lib
- <Hibernate et biblioth�ques tierces>
+ <Hibernate et bibliothèques tierces>
+src
Event.java
Event.hbm.xml]]></programlisting>
@@ -344,39 +346,39 @@
<para>
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
+ 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.
+ ce fichier dans le répertoire <literal>lib/</literal> du dossier de développement.
</para>
<para>
- 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.
+ 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.
</para>
<para>
- 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
+ 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.
+ 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.
</para>
<para>
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 :
+ 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 :
</para>
<programlisting><![CDATA[<?xml version='1.0' encoding='utf-8'?>
@@ -418,28 +420,28 @@
</hibernate-configuration>]]></programlisting>
<para>
- Notez que cette configuration XML utilise une DTD diff�rente. Nous configurons
+ 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).
+ 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).
</para>
<para>
- 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
+ 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.
</para>
<para>
- Copiez ce fichier dans le r�pertoire source, il terminera dans la racine
- du classpath. Hibernate cherchera automatiquement, au d�marrage, un fichier appel�
+ 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.
</para>
@@ -450,16 +452,16 @@
<para>
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.
+ 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.
</para>
<para>
- Un fichier de construction basique ressemble � �a :
+ Un fichier de construction basique ressemble à ça :
</para>
<programlisting><![CDATA[<project name="hibernate-tutorial" default="compile">
@@ -496,9 +498,9 @@
</project>]]></programlisting>
<para>
- 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
+ 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 :
</para>
@@ -518,23 +520,23 @@
</sect2>
<sect2 id="tutorial-firstapp-helpers" revision="3">
- <title>D�marrage et aides</title>
+ <title>Démarrage et aides</title>
<para>
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
+ 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>
+ 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.
+ représente une unité de travail simplement "threadée", la <literal>SessionFactory</literal>
+ est un objet global "thread-safe", instancié une seule fois.
</para>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[package util;
@@ -547,7 +549,7 @@
static {
try {
- // Cr�ation de la SessionFactory � partir de hibernate.cfg.xml
+ // Création de la SessionFactory à partir de hibernate.cfg.xml
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
@@ -565,21 +567,21 @@
<para>
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
+ 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.
</para>
<para>
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.
+ 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.
</para>
<para>
- Placez <literal>HibernateUtil.java</literal> dans le r�pertoire source de d�veloppement,
+ Placez <literal>HibernateUtil.java</literal> dans le répertoire source de développement,
et ensuite <literal>Event.java</literal> :
</para>
@@ -597,19 +599,19 @@
build.xml]]></programlisting>
<para>
- 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 :
+ 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.
+ 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.
</para>
<para>
- L'infrastructure de ce didacticiel est compl�te - et nous sommes pr�ts � effectuer un
- travail r�el avec Hibernate.
+ L'infrastructure de ce didacticiel est complète - et nous sommes prêts à effectuer un
+ travail réel avec Hibernate.
</para>
</sect2>
@@ -619,7 +621,7 @@
<para>
Finalement nous pouvons utiliser Hibernate pour charger et stocker des objets.
- Nous �crivons une classe <literal>EventManager</literal> avec une m�thode
+ Nous écrivons une classe <literal>EventManager</literal> avec une méthode
<literal>main()</literal> :
</para>
@@ -658,45 +660,45 @@
}]]></programlisting>
<para>
- 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.
+ 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.
</para>
<para>
- 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
+ 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.
</para>
<para>
- 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
+ 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
+ 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.
</para>
<para>
- 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.
+ 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.
</para>
<para>
- Pour lancer cette premi�re routine, nous devons ajouter une cible appelable dans
+ Pour lancer cette première routine, nous devons ajouter une cible appelable dans
le fichier de construction de Ant :
</para>
@@ -708,28 +710,28 @@
</target>]]></programlisting>
<para>
- La valeur de l'argument <literal>action</literal> correspond � la ligne de commande
+ La valeur de l'argument <literal>action</literal> correspond à la ligne de commande
qui appelle la cible :
</para>
<programlisting><![CDATA[C:\hibernateTutorial\>ant run -Daction=store]]></programlisting>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[[java] Hibernate: insert into EVENTS (EVENT_DATE, title, EVENT_ID) values (?, ?, ?)]]></programlisting>
<para>
- 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>.
+ 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>.
</para>
<para>
- Maintenant nous aimerions aussi lister les �v�nements stock�s, donc nous ajoutons une
- option � la m�thode principale :
+ Maintenant nous aimerions aussi lister les événements stockés, donc nous ajoutons une
+ option à la méthode principale :
</para>
<programlisting><![CDATA[if (args[0].equals("store")) {
@@ -745,7 +747,7 @@
}]]></programlisting>
<para>
- Nous ajoutons aussi une nouvelle m�thode <literal>listEvents()</literal> :
+ Nous ajoutons aussi une nouvelle méthode <literal>listEvents()</literal> :
</para>
<programlisting><![CDATA[private List listEvents() {
@@ -762,33 +764,33 @@
}]]></programlisting>
<para>
- 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.
+ 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.
</para>
<para>
- Maintenant, pour ex�cuter et tester tout �a, suivez ces �tapes :
+ Maintenant, pour exécuter et tester tout ça, suivez ces étapes :
</para>
<itemizedlist>
<listitem>
<para>
- 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.
+ 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.
</para>
</listitem>
<listitem>
<para>
- 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
+ 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
+ tables du schéma, puis re-créer toutes les tables, lorsque la SessionFactory est
construite".
</para>
</listitem>
@@ -796,7 +798,7 @@
<para>
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
+ les événements que vous avez stockés jusque là. Vous pouvez bien sûr aussi appeler l'action
<literal>store</literal> plusieurs fois.
</para>
@@ -808,16 +810,16 @@
<title>Partie 2 - Mapper des associations</title>
<para>
- 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.
+ 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.
</para>
<sect2 id="tutorial-associations-mappinguser" revision="1">
<title>Mapper la classe Person</title>
<para>
- La premi�re version de la classe <literal>Person</literal> est simple :
+ La première version de la classe <literal>Person</literal> est simple :
</para>
<programlisting><![CDATA[package events;
@@ -836,8 +838,8 @@
}]]></programlisting>
<para>
- Cr�ez un nouveau fichier de mapping appel� <literal>Person.hbm.xml</literal>
- (n'oubliez pas la r�f�rence � la DTD)
+ Créez un nouveau fichier de mapping appelé <literal>Person.hbm.xml</literal>
+ (n'oubliez pas la référence à la DTD)
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -854,35 +856,35 @@
</hibernate-mapping>]]></programlisting>
<para>
- Finalement, ajoutez la nouveau mapping � la configuration d'Hibernate :
+ Finalement, ajoutez la nouveau mapping à la configuration d'Hibernate :
</para>
<programlisting><![CDATA[<mapping resource="events/Event.hbm.xml"/>
<mapping resource="events/Person.hbm.xml"/>]]></programlisting>
<para>
- 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
+ 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.
</para>
</sect2>
<sect2 id="tutorial-associations-unidirset" revision="2">
- <title>Une association unidirectionnelle bas�e sur Set</title>
+ <title>Une association unidirectionnelle basée sur Set</title>
<para>
- 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
+ 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
+ <literal>Set</literal>, parce que la collection ne contiendra pas d'éléments dupliqués et
l'ordre ne nous importe pas.
</para>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[public class Person {
@@ -899,15 +901,15 @@
}]]></programlisting>
<para>
- 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:
+ 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:
</para>
<programlisting><![CDATA[<class name="events.Person" table="PERSON">
@@ -927,18 +929,18 @@
<para>
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
+ é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).
+ devez aussi donner à Hibernate la classe des objets de votre collection (c'est-à-dire : la
+ classe de l'autre côté de la collection).
</para>
<para>
- Le sch�ma de base de donn�es pour ce mapping est donc :
+ Le schéma de base de données pour ce mapping est donc :
</para>
<programlisting><![CDATA[
@@ -961,7 +963,7 @@
<title>Travailler avec l'association</title>
<para>
- R�unissons quelques personnes et quelques �v�nements dans une nouvelle m�thode dans
+ Réunissons quelques personnes et quelques événements dans une nouvelle méthode dans
<literal>EventManager</literal> :
</para>
@@ -979,27 +981,27 @@
}]]></programlisting>
<para>
- 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
+ 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 la 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
+ 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 la 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>.
</para>
<para>
- 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:
+ 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:
</para>
<programlisting><![CDATA[private void addPersonToEvent(Long personId, Long eventId) {
@@ -1031,10 +1033,10 @@
}]]></programlisting>
<para>
- 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
+ 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).
</para>
@@ -1045,31 +1047,31 @@
System.out.println("Added person " + personId + " to event " + eventId);]]></programlisting>
<para>
- Ce n'est pas tr�s utile dans notre situation actuelle, mais c'est un concept important
+ 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.
+ 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.
</para>
<para>
- 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>
+ 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,
+ 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>Address</literal> ou <literal>MonetaryAmount</literal>, par exemple.
</para>
<para>
- 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.
+ 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.
</para>
</sect2>
@@ -1078,7 +1080,7 @@
<title>Collection de valeurs</title>
<para>
- Nous ajoutons une collection d'objets de type de valeur � l'entit� <literal>Person</literal>.
+ 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> :
</para>
@@ -1102,19 +1104,19 @@
</set>]]></programlisting>
<para>
- 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
+ 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.
+ <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.
</para>
<para>
- Regardons le sch�ma mis � jour :
+ Regardons le schéma mis à jour :
</para>
<programlisting><![CDATA[
@@ -1133,14 +1135,14 @@
<para>
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
+ 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.
</para>
<para>
- 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
+ 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.
</para>
@@ -1158,9 +1160,9 @@
}]]></programlisting>
<para>
- 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
+ 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.
</para>
@@ -1171,15 +1173,15 @@
<para>
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.
+ 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.
</para>
<para>
- D'abord, ajouter une collection de participants � la classe <literal>Event</literal> :
+ D'abord, ajouter une collection de participants à la classe <literal>Event</literal> :
</para>
<programlisting><![CDATA[private Set participants = new HashSet();
@@ -1193,7 +1195,7 @@
}]]></programlisting>
<para>
- Maintenant mapper ce c�t� de l'association aussi, dans <literal>Event.hbm.xml</literal>.
+ Maintenant mapper ce côté de l'association aussi, dans <literal>Event.hbm.xml</literal>.
</para>
<programlisting><![CDATA[<set name="participants" table="PERSON_EVENT" inverse="true">
@@ -1204,16 +1206,16 @@
<para>
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>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.
</para>
<para>
- 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��.
+ 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éé.
</para>
</sect2>
@@ -1222,19 +1224,19 @@
<title>Travailler avec des liens bidirectionnels</title>
<para>
- 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.
+ 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.
</para>
<para>
- 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,
+ 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> :
</para>
@@ -1257,25 +1259,25 @@
}]]></programlisting>
<para>
- 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�.
+ 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é.
</para>
<para>
- 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.
+ 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>inverse</literal>.
- Dans une association un-vers-plusieurs vous pouvez choisir n'importe quel c�t�, il n'y a pas de
- diff�rence.
+ <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>inverse</literal>.
+ Dans une association un-vers-plusieurs vous pouvez choisir n'importe quel côté, il n'y a pas de
+ différence.
</para>
<!--
<para>
@@ -1292,15 +1294,15 @@
<para>
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.
+ <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.
</para>
<sect2 id="tutorial-webapp-servlet">
<title>Ecrire la servlet de base</title>
<para>
- Cr�ons une nouvelle classe dans notre r�pertoire source, dans le package <literal>events</literal>:
+ Créons une nouvelle classe dans notre répertoire source, dans le package <literal>events</literal>:
</para>
<programlisting><![CDATA[package events;
@@ -1317,12 +1319,12 @@
<para>
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
+ <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.
</para>
<para>
- La servlet n'accepte que les requ�tes HTTP <literal>GET</literal>, la m�thode � impl�menter est donc
+ La servlet n'accepte que les requêtes HTTP <literal>GET</literal>, la méthode à implémenter est donc
<literal>doGet()</literal>:
</para>
@@ -1350,37 +1352,37 @@
}]]></programlisting>
<para>
- 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).
+ 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).
</para>
<para>
- Ensuite, les actions possibles de la requ�tes sont ex�cut�es et la r�ponse HTML
+ Ensuite, les actions possibles de la requêtes sont exécutées et la réponse HTML
est rendue. Nous en parlerons plus tard.
</para>
<para>
- 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
+ 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.
</para>
</sect2>
<sect2 id="tutorial-webapp-processing">
- <title>Proc�der et rendre</title>
+ <title>Procéder et rendre</title>
<para>
- Impl�mentons l'ex�cution de la requ�te et le rendu de la page.
+ Implémentons l'exécution de la requête et le rendu de la page.
</para>
<programlisting><![CDATA[// Write HTML header
@@ -1412,10 +1414,10 @@
<para>
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
+ 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:
</para>
@@ -1429,9 +1431,9 @@
}]]></programlisting>
<para>
- La m�thode <literal>listEvents()</literal> utilise la
- <literal>Session</literal> Hibernate li�e au thread courant pour ex�cuter la
- requ�te:
+ La méthode <literal>listEvents()</literal> utilise la
+ <literal>Session</literal> Hibernate liée au thread courant pour exécuter la
+ requête:
</para>
<programlisting><![CDATA[private void listEvents(PrintWriter out) {
@@ -1456,7 +1458,7 @@
}]]></programlisting>
<para>
- FEnfin, l'action <literal>store</literal> renvoie � la m�thode
+ FEnfin, l'action <literal>store</literal> renvoie à la méthode
<literal>createAndStoreEvent()</literal>, qui utilise aussi la
<literal>Session</literal> du thread courant:
</para>
@@ -1471,23 +1473,23 @@
}]]></programlisting>
<para>
- La servlet est faite. Une requ�te � la servlet sera ex�cut�e par une seule
+ 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
+ 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
+ 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.
</para>
</sect2>
<sect2 id="tutorial-webapp-deploy">
- <title>D�ployer et tester</title>
+ <title>Déployer et tester</title>
<para>
- Pour d�ployer cette application, vous devez cr�er une archive Web, un War. Ajoutez
+ 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>:
</para>
@@ -1502,9 +1504,9 @@
</target>]]></programlisting>
<para>
- 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:
+ 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:
</para>
<programlisting><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
@@ -1525,27 +1527,27 @@
</web-app>]]></programlisting>
<para>
- 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
+ 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
+ dans votre répertoire des bibliothèques. Cependant, elle ne sera utilisée uniquement pour la
compilation et sera exclue du paackage WAR.
</para>
<para>
- 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.
+ 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.
</para>
<para>
- Une fois l'application d�ploy�e et Tomcat lanc�, acc�dez � l'application via
+ 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.
+ 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.
</para>
</sect2>
@@ -1553,22 +1555,22 @@
</sect1>
<sect1 id="tutorial-summary" revision="1">
- <title>R�sum�</title>
+ <title>Résumé</title>
<para>
- Ce didacticiel a couvert les bases de l'�criture d'une simple application Hibernate ainsi qu'une petite application web.
+ Ce didacticiel a couvert les bases de l'écriture d'une simple application Hibernate ainsi qu'une petite application web.
</para>
<para>
- 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"/>).
+ 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"/>).
</para>
<para>
- N'oubliez pas de v�rifier le site web d'Hibernate pour d'autres didacticiels (plus sp�cialis�s).
+ N'oubliez pas de vérifier le site web d'Hibernate pour d'autres didacticiels (plus spécialisés).
</para>
</sect1>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/content/xml.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/content/xml.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/content/xml.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,50 +1,52 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="xml">
<title>Mapping XML</title>
<para><emphasis>
- Notez que cette fonctionnalit� est exp�rimentale dans Hibernate 3.0 et
- est en d�veloppement extr�mement actif.
+ Notez que cette fonctionnalité est expérimentale dans Hibernate 3.0 et
+ est en développement extrêmement actif.
</emphasis></para>
<sect1 id="xml-intro" revision="1">
- <title>Travailler avec des donn�es XML</title>
+ <title>Travailler avec des données XML</title>
<para>
- 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.
+ 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.
</para>
<para>
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 :
+ 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�).
+ (merge() n'est pas encore supporté).
</para>
<para>
- 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.
+ 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.
</para>
<para>
- 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
+ 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.
</para>
<sect2 id="xml-intro-mapping">
- <title>Sp�cifier le mapping XML et le mapping d'une classe ensemble</title>
+ <title>Spécifier le mapping XML et le mapping d'une classe ensemble</title>
<para>
- Voici un exemple de mapping d'un POJO et du XML simultan�ment :
+ Voici un exemple de mapping d'un POJO et du XML simultanément :
</para>
<programlisting><![CDATA[<class name="Account"
@@ -70,7 +72,7 @@
</sect2>
<sect2 id="xml-onlyxml">
- <title>Sp�cifier seulement un mapping XML</title>
+ <title>Spécifier seulement un mapping XML</title>
<para>
Voici un exemple dans lequel il n'y a pas de class POJO :
@@ -101,10 +103,10 @@
</class>]]></programlisting>
<para>
- 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.
+ 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.
</para>
</sect2>
@@ -112,45 +114,45 @@
</sect1>
<sect1 id="xml-mapping" revision="1">
- <title>M�tadonn�es du mapping XML</title>
+ <title>Métadonnées du mapping XML</title>
<para>
- 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 :
+ 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 :
</para>
<itemizedlist spacing="compact">
<listitem>
- <para><literal>"element-name"</literal> - mappe vers l'�l�ment XML nomm�</para>
+ <para><literal>"element-name"</literal> - mappe vers l'élément XML nommé</para>
</listitem>
<listitem>
- <para><literal>"@attribute-name"</literal> - mappe vers l'attribut XML nomm�</para>
+ <para><literal>"@attribute-name"</literal> - mappe vers l'attribut XML nommé</para>
</listitem>
<listitem>
- <para><literal>"."</literal> - mappe vers le parent de l'�l�ment</para>
+ <para><literal>"."</literal> - mappe vers le parent de l'élément</para>
</listitem>
<listitem>
<para>
<literal>"element-name/@attribute-name"</literal> -
- mappe vers l'�l�ment nomm� de l'attribut nomm�
+ mappe vers l'élément nommé de l'attribut nommé
</para>
</listitem>
</itemizedlist>
<para>
- 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.
+ 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.
</para>
<para>
- Vous devriez faire attention � ne pas laisser <literal>embed-xml="true"</literal>
+ 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.
</para>
@@ -190,14 +192,14 @@
</class>]]></programlisting>
<para>
- 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 :
+ 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 :
</para>
<programlisting><![CDATA[from Customer c left join fetch c.accounts where c.lastName like :lastName]]></programlisting>
<para>
- devrait retourner l'ensemble de donn�es suivant :
+ devrait retourner l'ensemble de données suivant :
</para>
<programlisting><![CDATA[<customer id="123456789">
@@ -213,8 +215,8 @@
<para>
Si vous positionnez <literal>embed-xml="true"</literal> sur le mapping
- <literal><one-to-many></literal>, les donn�es pourraient
- ressembler plus � �a :
+ <literal><one-to-many></literal>, les données pourraient
+ ressembler plus à ça :
</para>
<programlisting><![CDATA[<customer id="123456789">
@@ -238,11 +240,11 @@
<sect1 id="xml-manipulation" revision="1">
- <title>Manipuler des donn�es XML</title>
+ <title>Manipuler des données XML</title>
<para>
- Relisons et mettons � jour des documents XML dans l'application. Nous faisons
- �a en obtenant une session dom4j :
+ Relisons et mettons à jour des documents XML dans l'application. Nous faisons
+ ça en obtenant une session dom4j :
</para>
<programlisting><![CDATA[Document doc = ....;
@@ -281,9 +283,9 @@
session.close();]]></programlisting>
<para>
- 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.
+ 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.
</para>
</sect1>
Modified: core/trunk/documentation/manual/fr-FR/src/main/docbook/legal_notice.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/legal_notice.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/legal_notice.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,4 +1,4 @@
-<?xml version='1.0'?>
+<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE legalnotice PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<!--
@@ -49,4 +49,4 @@
<para>
CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E
</para>
-</legalnotice>
\ No newline at end of file
+</legalnotice>
Deleted: core/trunk/documentation/manual/fr-FR/src/main/docbook/translators.xml
===================================================================
--- core/trunk/documentation/manual/fr-FR/src/main/docbook/translators.xml 2007-10-19 04:15:16 UTC (rev 14113)
+++ core/trunk/documentation/manual/fr-FR/src/main/docbook/translators.xml 2007-10-19 04:36:47 UTC (rev 14114)
@@ -1,34 +0,0 @@
-<?xml version='1.0'?>
-
-<!DOCTYPE authorgroup PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<authorgroup id="AuthorGroup">
- <othercredit class="translator">
- <firstname>Vincent</firstname>
- <surname>Ricard</surname>
- </othercredit>
- <othercredit class="translator">
- <firstname>Sebastien</firstname>
- <surname>Cesbron</surname>
- </othercredit>
- <othercredit class="translator">
- <firstname>Michael</firstname>
- <surname>Courcy</surname>
- </othercredit>
- <othercredit class="translator">
- <firstname>Vincent</firstname>
- <surname>Giguère</surname>
- </othercredit>
- <othercredit class="translator">
- <firstname>Baptiste</firstname>
- <surname>Mathus</surname>
- </othercredit>
- <othercredit class="translator">
- <firstname>Emmanuel</firstname>
- <surname>Bernard</surname>
- </othercredit>
- <othercredit class="translator">
- <firstname>Anthony</firstname>
- <surname>Patricio</surname>
- </othercredit>
-</authorgroup>
\ No newline at end of file
17 years, 2 months
Hibernate SVN: r14113 - in core/trunk/documentation/manual/es-ES/src/main/docbook: content and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2007-10-19 00:15:16 -0400 (Fri, 19 Oct 2007)
New Revision: 14113
Removed:
core/trunk/documentation/manual/es-ES/src/main/docbook/legal_notice2.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/translators.xml
Modified:
core/trunk/documentation/manual/es-ES/src/main/docbook/Hibernate_Reference.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/architecture.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/association_mapping.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/basic_mapping.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/batch.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/best_practices.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/collection_mapping.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/component_mapping.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/configuration.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/events.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_mappings.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_parentchild.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_weblog.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/filters.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/inheritance_mapping.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/performance.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/persistent_classes.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/preface.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_criteria.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_hql.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_sql.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/quickstart.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/session_api.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/toolset_guide.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/transactions.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/tutorial.xml
core/trunk/documentation/manual/es-ES/src/main/docbook/content/xml.xml
Log:
prep for gettext conversion
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/Hibernate_Reference.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/Hibernate_Reference.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/Hibernate_Reference.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -40,9 +40,7 @@
<year>©rightYear;</year>
<holder>©rightHolder;</holder>
</copyright>
- <xi:include href="translators.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="legal_notice.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="legal_notice2.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
</bookinfo>
<toc/>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/architecture.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/architecture.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/architecture.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="architecture">
<title>Arquitectura</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/association_mapping.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/association_mapping.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/association_mapping.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="associations">
<title>Mapeos de Asociación</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/basic_mapping.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/basic_mapping.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/basic_mapping.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="mapping">
<title>Mapeo O/R Básico</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/batch.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/batch.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/batch.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="batch">
<title>Procesamiento por lotes</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/best_practices.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/best_practices.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/best_practices.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="best-practices" revision="3">
<title>Mejores Prácticas</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/collection_mapping.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/collection_mapping.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/collection_mapping.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="collections">
<title>Mapeo de Colecciones</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/component_mapping.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/component_mapping.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/component_mapping.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="components">
<title>Mapeo de Componentes</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/configuration.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/configuration.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/configuration.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="session-configuration" revision="1">
<title>Configuración</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/events.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/events.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/events.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="events">
<title>Interceptores y eventos</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_mappings.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_mappings.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_mappings.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="example-mappings">
<title>Ejemplo: Varios Mapeos</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_parentchild.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_parentchild.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_parentchild.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="example-parentchild">
<title>Ejemplo: Padre/Hijo</title>
@@ -359,4 +362,4 @@
</sect1>
-</chapter>
\ No newline at end of file
+</chapter>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_weblog.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_weblog.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/example_weblog.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="example-weblog">
<title>Ejemplo: Aplicación de Weblog</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/filters.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/filters.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/filters.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="filters">
<title>Filtrando datos</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/inheritance_mapping.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/inheritance_mapping.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/inheritance_mapping.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="inheritance">
<title>Mapeo de Herencia</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/performance.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/performance.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/performance.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="performance">
<title>Mejorando el rendimiento</title>
@@ -1331,4 +1334,4 @@
</sect1>
-</chapter>
\ No newline at end of file
+</chapter>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/persistent_classes.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/persistent_classes.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/persistent_classes.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="persistent-classes" revision="2">
<title>Clases Persistentes</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/preface.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/preface.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/preface.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,5 +1,4 @@
-<?xml version='1.0'?>
-
+<?xml version='1.0' encoding="iso-8859-1"?>
<!DOCTYPE preface PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<preface id="preface" revision="2">
@@ -109,4 +108,4 @@
JBoss Professional.
</para>
- </preface>
\ No newline at end of file
+ </preface>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_criteria.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_criteria.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_criteria.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="querycriteria">
<title>Consultas por Criterios</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_hql.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_hql.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_hql.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="queryhql">
<title>HQL: El Lenguaje de Consulta de Hibernate</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_sql.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_sql.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/query_sql.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="querysql" revision="2">
<title>SQL Nativo</title>
@@ -474,4 +477,4 @@
</sect1>
-</chapter>
\ No newline at end of file
+</chapter>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/quickstart.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/quickstart.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/quickstart.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="quickstart">
<title>Comienzo rápido con Tomcat</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/session_api.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/session_api.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/session_api.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="objectstate">
<title>Trabajando con objetos</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/toolset_guide.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/toolset_guide.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/toolset_guide.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="toolsetguide" revision="2">
<title>Guía del Conjunto de Herramientas</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/transactions.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/transactions.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/transactions.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="transactions" revision="1">
<title>Transacciones y Concurrencia</title>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/tutorial.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/tutorial.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/tutorial.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="tutorial">
<title>Introducción a Hibernate</title>
@@ -1267,4 +1270,4 @@
</sect1>
-</chapter>
\ No newline at end of file
+</chapter>
Modified: core/trunk/documentation/manual/es-ES/src/main/docbook/content/xml.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/content/xml.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/content/xml.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,3 +1,6 @@
+<?xml version='1.0' encoding="iso-8859-1"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="xml">
<title>Mapeo XML</title>
Deleted: core/trunk/documentation/manual/es-ES/src/main/docbook/legal_notice2.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/legal_notice2.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/legal_notice2.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,16 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE legalnotice PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<legalnotice id="Legal_Notice">
- <title>Translation-specific Legal Notice</title>
- <para>
- Advertencia! Esta es una versión traducida del inglés de
- la documentacién de referencia de Hibernate. La versión
- traducida puede no estar actualizada! Sin embargo, las diferencias
- deberían ser sólo menores. Consulta la documentación
- de referencia en inglés si estás perdiendo información
- o encuentras algún error de traducción. Si quieres colaborar con
- una traducción en particular, contáctanos en la lista de correo
- de desarrolladores de Hibernate.
- </para>
-</legalnotice>
\ No newline at end of file
Deleted: core/trunk/documentation/manual/es-ES/src/main/docbook/translators.xml
===================================================================
--- core/trunk/documentation/manual/es-ES/src/main/docbook/translators.xml 2007-10-19 04:07:06 UTC (rev 14112)
+++ core/trunk/documentation/manual/es-ES/src/main/docbook/translators.xml 2007-10-19 04:15:16 UTC (rev 14113)
@@ -1,10 +0,0 @@
-<?xml version='1.0'?>
-
-<!DOCTYPE authorgroup PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<authorgroup id="AuthorGroup">
- <othercredit class="translator">
- <othername><![CDATA[Bernardo Antonio Buffa Colomé]]></othername>
- <email>kreimer(a)bbs.frc.utn.edu.ar</email>
- </othercredit>
-</authorgroup>
\ No newline at end of file
17 years, 2 months
Hibernate SVN: r14111 - core/trunk/documentation/manual/en-US/src/main/docbook.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2007-10-19 00:05:25 -0400 (Fri, 19 Oct 2007)
New Revision: 14111
Removed:
core/trunk/documentation/manual/en-US/src/main/docbook/author_group.xml
Modified:
core/trunk/documentation/manual/en-US/src/main/docbook/Hibernate_Reference.xml
Log:
minor
Modified: core/trunk/documentation/manual/en-US/src/main/docbook/Hibernate_Reference.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/Hibernate_Reference.xml 2007-10-19 03:50:52 UTC (rev 14110)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/Hibernate_Reference.xml 2007-10-19 04:05:25 UTC (rev 14111)
@@ -40,24 +40,21 @@
<year>©rightYear;</year>
<holder>©rightHolder;</holder>
</copyright>
- <!--
- todo : figure out how best to include translator info...
- <xi:include href="author_group.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- -->
<xi:include href="legal_notice.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <!-- include translators... -->
</bookinfo>
<toc/>
<xi:include href="content/preface.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="content/tutorial.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="content/tutorial.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="content/architecture.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="content/architecture.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="content/configuration.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="content/configuration.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
- <xi:include href="content/persistent_classes.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="content/persistent_classes.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/basic_mapping.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/collection_mapping.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
Deleted: core/trunk/documentation/manual/en-US/src/main/docbook/author_group.xml
===================================================================
--- core/trunk/documentation/manual/en-US/src/main/docbook/author_group.xml 2007-10-19 03:50:52 UTC (rev 14110)
+++ core/trunk/documentation/manual/en-US/src/main/docbook/author_group.xml 2007-10-19 04:05:25 UTC (rev 14111)
@@ -1,30 +0,0 @@
-<?xml version='1.0'?>
-<!--
- ~ Copyright (c) 2007, Red Hat Middleware, LLC. All rights reserved.
- ~
- ~ This copyrighted material is made available to anyone wishing to use, modify,
- ~ copy, or redistribute it subject to the terms and conditions of the GNU
- ~ Lesser General Public License, v. 2.1. This program is distributed in the
- ~ hope that it will be useful, but WITHOUT A WARRANTY; without even the implied
- ~ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- ~ Lesser General Public License for more details. You should have received a
- ~ copy of the GNU Lesser General Public License, v.2.1 along with this
- ~ distribution; if not, write to the Free Software Foundation, Inc.,
- ~ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- ~
- ~ Red Hat Author(s): Steve Ebersole
- -->
-<!DOCTYPE authorgroup PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
-
-<authorgroup id="AuthorGroup">
- <collab>
- <collabname>The Hibernate team</collabname>
- </collab>
- <!-- translations should list all contributors to the translation using the 'translator' class
- <othercredit class="translator">
- <firstname>Jane</firstname>
- <surname>Doe</surname>
- <contrib>Japenese translation</contrib>
- </othercredit>
- -->
-</authorgroup>
\ No newline at end of file
17 years, 2 months
Hibernate SVN: r14110 - in core/trunk/documentation/manual/ja-JP/src/main/docbook: content and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2007-10-18 23:50:52 -0400 (Thu, 18 Oct 2007)
New Revision: 14110
Modified:
core/trunk/documentation/manual/ja-JP/src/main/docbook/Hibernate_Reference.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/architecture.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/association_mapping.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/basic_mapping.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/batch.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/best_practices.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/collection_mapping.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/component_mapping.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/configuration.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/events.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/example_mappings.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/example_parentchild.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/example_weblog.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/filters.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/inheritance_mapping.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/performance.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/persistent_classes.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/preface.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/query_criteria.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/query_hql.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/query_sql.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/session_api.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/toolset_guide.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/transactions.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/tutorial.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/xml.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/legal_notice.xml
Log:
updated encoding to UTF-8
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/Hibernate_Reference.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/Hibernate_Reference.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/Hibernate_Reference.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY versionNumber "3.3.0.alpha1">
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/architecture.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/architecture.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/architecture.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,13 +1,15 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="architecture">
- <title>�A�[�L�e�N�`��</title>
+ <title>アーキテクチャ</title>
<sect1 id="architecture-overview" revision="1">
- <title>�T��</title>
+ <title>概観</title>
<para>
- Hibernate�A�[�L�e�N�`���́i���Ɂj�������x������̃r���[�F
+ Hibernateアーキテクチャの(非常に)高いレベルからのビュー:
</para>
<mediaobject>
@@ -20,18 +22,18 @@
</mediaobject>
<para>
- ���̐}��Hibernate���A�A�v���P�[�V�����ɑ��ĉi�����T�[�r�X
- �i�Ɖi���I�u�W�F�N�g�j����邽�߂ɁA�f�[�^�x�[�X�Ɛݒ�f�[�^��g�����Ƃ�
- �����Ă��܂��B
+ この図はHibernateが、アプリケーションに対して永続化サービス
+ (と永続オブジェクト)を提供するために、データベースと設定データを使うことを
+ 示しています。
</para>
<para>
- �����Ŏ��s���A�[�L�e�N�`���̂��ڍׂȃr���[���������܂��傤�B
- �����ɂ��AHibernate�͏_��ł���A���낢��ȃA�v���[�`��T�|�[�g���Ă��܂��B
- �����ł́A2�̋ɒ[�ȗ���������܂��B
- �u�y���v�A�[�L�e�N�`���ł́A�A�v���P�[�V���������O��JDBC�R�l�N�V������p�ӂ��A
- �A�v���P�[�V�������g���g�����U�N�V������Ǘ����܂��B
- ���̕��@�́AHibernate API�̍ŏ����̃T�u�Z�b�g��g���܂��F
+ ここで実行時アーキテクチャのより詳細なビューをお見せしましょう。
+ あいにく、Hibernateは柔軟であり、いろいろなアプローチをサポートしています。
+ ここでは、2つの極端な例をお見せします。
+ 「軽い」アーキテクチャでは、アプリケーションが自前のJDBCコネクションを用意し、
+ アプリケーション自身がトランザクションを管理します。
+ この方法は、Hibernate APIの最小限のサブセットを使います:
</para>
<mediaobject>
@@ -44,8 +46,8 @@
</mediaobject>
<para>
- �u�d���v�A�[�L�e�N�`���́A�A�v���P�[�V��������A���̉��Ɉʒu����JDBC��JTA��API��
- ��蕥���Ē��ۉ����A���̏ڍׂ̖ʓ|��Hibernate�Ɍ������܂��B
+ 「重い」アーキテクチャは、アプリケーションから、その下に位置するJDBCやJTAのAPIを
+ 取り払って抽象化し、その詳細の面倒をHibernateに見させます。
</para>
<mediaobject>
@@ -58,19 +60,19 @@
</mediaobject>
<para>
- �ȉ��́A��̐}�Ɋ܂܂��I�u�W�F�N�g�̒�`�ł��F
+ 以下は、上の図に含まれるオブジェクトの定義です:
<variablelist spacing="compact">
<varlistentry>
<term>SessionFactory (<literal>org.hibernate.SessionFactory</literal>)</term>
<listitem>
<para>
- 1�̃f�[�^�x�[�X�ɑ���R���p�C�����ꂽ�}�b�s���O��
- �X���b�h�Z�[�t�ȁi�X�V�s�\�́j�L���b�V���B
- <literal>Session</literal> �̃t�@�N�g���ł���A
- <literal>ConnectionProvider</literal> �̃N���C�A���g�B
- �I�v�V�����Ƃ��āA�v���Z�X�܂��̓N���X�^���x���ɂ����āA
- �g�����U�N�V�����Ԃōė��p�\�ȃf�[�^�́i�j�L���b�V�������܂��B
+ 1つのデータベースに対するコンパイルされたマッピングの
+ スレッドセーフな(更新不能の)キャッシュ。
+ <literal>Session</literal> のファクトリであり、
+ <literal>ConnectionProvider</literal> のクライアント。
+ オプションとして、プロセスまたはクラスタレベルにおいて、
+ トランザクション間で再利用可能なデータの(二次)キャッシュを持ちます。
</para>
</listitem>
</varlistentry>
@@ -78,38 +80,38 @@
<term>Session (<literal>org.hibernate.Session</literal>)</term>
<listitem>
<para>
- �A�v���P�[�V�����Ɖi���X�g�A�Ƃ̑Θb��\���A
- �V���O���X���b�h�ŒZ���̃I�u�W�F�N�g�B
- JDBC�R�l�N�V�������b�v���܂��B
- <literal>Transaction</literal> �̃t�@�N�g���ł��B
- �i���I�u�W�F�N�g�̕K�{�́i�ꎟ�j�L���b�V����ێ����܂��B
- ���̃L���b�V���̓I�u�W�F�N�g�O���t��i�r�Q�[�V�������鎞��A
- ���ʎq�ŃI�u�W�F�N�g�������鎞�Ɏg���܂��B
+ アプリケーションと永続ストアとの対話を表す、
+ シングルスレッドで短命のオブジェクト。
+ JDBCコネクションをラップします。
+ <literal>Transaction</literal> のファクトリです。
+ 永続オブジェクトの必須の(一次)キャッシュを保持します。
+ このキャッシュはオブジェクトグラフをナビゲーションする時や、
+ 識別子でオブジェクトを検索する時に使われます。
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>Persistent objects �� Collections</term>
+ <term>Persistent objects と Collections</term>
<listitem>
<para>
- �i������Ԃƃr�W�l�X���\�b�h���A�Z���ŃV���O���X���b�h�̃I�u�W�F�N�g�B
- ����͒ʏ��JavaBeans/POJO�̂��Ƃ����܂����A�����I�Ȃ��Ƃ́A
- ���̎��_�ł́i����1�́j <literal>Session</literal> �Ɗ֘A���Ă��邱�Ƃł��B
- <literal>Session</literal> ���N���[�Y�����Ƃ����ɁA
- �����͐藣����đ��̃A�v���P�[�V�����w���玩�R�Ɏg�����Ƃ��ł��܂��B
- �i�Ⴆ�f�[�^�E�g�����X�t�@�E�I�u�W�F�N�g�Ƃ��āA
- �v���[���e�[�V�����w����A�܂��̓v���[���e�[�V�����w�֒��ڎg�p�ł��܂��B�j
+ 永続化状態とビジネスメソッドを持つ、短命でシングルスレッドのオブジェクト。
+ これは通常のJavaBeans/POJOのこともありますが、特徴的なことは、
+ その時点での(ただ1つの) <literal>Session</literal> と関連していることです。
+ <literal>Session</literal> がクローズされるとすぐに、
+ それらは切り離されて他のアプリケーション層から自由に使うことができます。
+ (例えばデータ・トランスファ・オブジェクトとして、
+ プレゼンテーション層から、またはプレゼンテーション層へ直接使用できます。)
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>Transient �� detached �� objects �� Collections</term>
+ <term>Transient と detached な objects と Collections</term>
<listitem>
<para>
- �����_�ł� <literal>Session</literal> �Ɗ֘A���Ă��Ȃ��A
- �i���N���X�̃C���X�^���X�B
- ���łɃA�v���P�[�V�������ŃC���X�^���X������Ă��āA�܂��i��������Ă��Ȃ����A
- �N���[�Y���ꂽ <literal>Session</literal> �ŃC���X�^���X�����ꂽ���̂ǂ��炩�ł��B
+ 現時点では <literal>Session</literal> と関連していない、
+ 永続クラスのインスタンス。
+ すでにアプリケーション側でインスタンス化されていて、まだ永続化されていないか、
+ クローズされた <literal>Session</literal> でインスタンス化されたかのどちらかです。
</para>
</listitem>
</varlistentry>
@@ -117,13 +119,13 @@
<term>Transaction (<literal>org.hibernate.Transaction</literal>)</term>
<listitem>
<para>
- (�I�v�V����)���q������ƒP��(Unit of Work)��w�肷�邽�߂ɁA�A�v���P�[�V�������g�p����A
- �V���O���X���b�h�ŒZ���ȃI�u�W�F�N�g�B
- ���Ɉʒu����JDBC�AJTA�ACORBA�g�����U�N�V��������A�v���P�[�V�����𒊏ۉ����܂��B
- <literal>Session</literal> �́A���ɂ�
- �������� <literal>Transaction</literal> ��܂����邩�����܂���B
- �������A���̑w��API��g���ɂ���A <literal>Transaction</literal> ��g���ɂ���A
- �g�����U�N�V�������E��ݒ肷�邱�Ƃ́A�����ăI�v�V�����ł͂���܂���I�B
+ (オプション)原子性を持つ作業単位(Unit of Work)を指定するために、アプリケーションが使用する、
+ シングルスレッドで短命なオブジェクト。
+ 下に位置するJDBC、JTA、CORBAトランザクションからアプリケーションを抽象化します。
+ <literal>Session</literal> は、時には
+ いくつかの <literal>Transaction</literal> をまたがるかもしれません。
+ しかし、下の層のAPIを使うにせよ、 <literal>Transaction</literal> を使うにせよ、
+ トランザクション境界を設定することは、決してオプションではありません!。
</para>
</listitem>
</varlistentry>
@@ -131,10 +133,10 @@
<term>ConnectionProvider (<literal>org.hibernate.connection.ConnectionProvider</literal>)</term>
<listitem>
<para>
- (�I�v�V����)JDBC�R�l�N�V�����i�Ƃ��̃v�[���j�̃t�@�N�g���B
- ���̑w�Ɉʒu���� <literal>Datasource</literal> ��
- <literal>DriverManager</literal> ����A�v���P�[�V�����𒊏ۉ����܂��B
- �A�v���P�[�V�����ɂ͌��J����܂��A�J���҂��p���܂��͎������邱�Ƃ͉\�ł��B
+ (オプション)JDBCコネクション(とそのプール)のファクトリ。
+ 下の層に位置する <literal>Datasource</literal> や
+ <literal>DriverManager</literal> からアプリケーションを抽象化します。
+ アプリケーションには公開されませんが、開発者が継承または実装することは可能です。
</para>
</listitem>
</varlistentry>
@@ -142,8 +144,8 @@
<term>TransactionFactory (<literal>org.hibernate.TransactionFactory</literal>)</term>
<listitem>
<para>
- (�I�v�V����) <literal>Transaction</literal> �C���X�^���X�̃t�@�N�g���B
- �A�v���P�[�V�����ɂ͌��J����܂��A�J���҂��p���܂��͎������邱�Ƃ͉\�ł��B
+ (オプション) <literal>Transaction</literal> インスタンスのファクトリ。
+ アプリケーションには公開されませんが、開発者が継承または実装することは可能です。
</para>
</listitem>
</varlistentry>
@@ -151,9 +153,9 @@
<term><emphasis>Extension Interfaces</emphasis></term>
<listitem>
<para>
- Hibernate�́A�i���w�̐U�镑����J�X�^�}�C�Y���邽�߂ɁA
- �����̃I�v�V�����g���C���^�t�F�[�X��p�ӂ��Ă��܂��B
- �ڍׂ�API�h�L�������g��Q�Ƃ��Ă��������B
+ Hibernateは、永続層の振る舞いをカスタマイズするために、
+ 多くのオプション拡張インタフェースを用意しています。
+ 詳細はAPIドキュメントを参照してください。
</para>
</listitem>
</varlistentry>
@@ -161,18 +163,18 @@
</para>
<para>
- �u�y���v�A�[�L�e�N�`���ł́A�A�v���P�[�V�����͒���JTA��JDBC�ƑΘb���邽�߂ɁA
- <literal>Transaction</literal> �� <literal>TransactionFactory</literal> ��
- <literal>ConnectionProvider</literal> ��o�C�p�X���܂��B
+ 「軽い」アーキテクチャでは、アプリケーションは直接JTAやJDBCと対話するために、
+ <literal>Transaction</literal> や <literal>TransactionFactory</literal> や
+ <literal>ConnectionProvider</literal> をバイパスします。
</para>
</sect1>
<sect1 id="architecture-states" revision="1">
- <title>�C���X�^���X�̏��</title>
+ <title>インスタンスの状態</title>
<para>
- �i���N���X�̃C���X�^���X�́A���̂R�̈قȂ��Ԃ̂ǂꂩ�ɂȂ�܂��B
- ����́A <emphasis>�i���R���e�L�X�g</emphasis> �ɂ���Č��܂�܂��B
- Hibernate�� <literal>Session</literal> �I�u�W�F�N�g���A�i���R���e�L�X�g�ɂȂ�܂��B
+ 永続クラスのインスタンスは、次の3つの異なる状態のどれかになります。
+ それは、 <emphasis>永続コンテキスト</emphasis> によって決まります。
+ Hibernateの <literal>Session</literal> オブジェクトが、永続コンテキストになります。
</para>
<variablelist spacing="compact">
@@ -180,9 +182,9 @@
<term>transient</term>
<listitem>
<para>
- ���̏�Ԃ̃C���X�^���X�́A���݂�����ĉߋ��ɂ����Ă�A
- �i���R���e�L�X�g�Ɋ֘A�Â��Ă��܂���B�܂��A�i��ID�i��L�[�̒l�j��
- �����Ă��܂���B
+ この状態のインスタンスは、現在もそして過去においても、
+ 永続コンテキストに関連づいていません。また、永続ID(主キーの値)を
+ 持っていません。
</para>
</listitem>
</varlistentry>
@@ -190,12 +192,12 @@
<term>persistent</term>
<listitem>
<para>
- ���̏�Ԃ̃C���X�^���X�́A���̎��_�ʼni���R���e�L�X�g�Ɋ֘A�Â��Ă��܂��B
- �܂��A�i��ID�i��L�[�̒l�j�����A
- �����Ă��̓f�[�^�x�[�X�ɑΉ�����s�����Ă���ł��傤�B
- �X�̉i���R���e�L�X�g�̂Ȃ��ł́A�i��ID��
- Java��ID�i�I�u�W�F�N�g�̃�������̈ʒu�j�Ɠ����ł��邱�Ƃ�
- Hibernate�� <emphasis>�ۏ�</emphasis> ���܂��B
+ この状態のインスタンスは、その時点で永続コンテキストに関連づいています。
+ また、永続ID(主キーの値)を持ち、
+ たいていはデータベースに対応する行を持っているでしょう。
+ 個々の永続コンテキストのなかでは、永続IDが
+ JavaのID(オブジェクトのメモリ上の位置)と同じであることを
+ Hibernateが <emphasis>保証</emphasis> します。
</para>
</listitem>
</varlistentry>
@@ -203,12 +205,12 @@
<term>detached</term>
<listitem>
<para>
- ���̏�Ԃ̃C���X�^���X�́A���ĉi���R���e�L�X�g�Ɋ֘A�Â���ꂽ���A
- ���̃R���e�L�X�g���N���[�Y���ꂽ���A���邢�́A
- ���̃v���Z�X�ɂ��̃C���X�^���X���V���A���C�Y���ꂽ���ł��B
- ���̃C���X�^���X�́A�i��ID�����A�����Ă��̓f�[�^�x�[�X��
- �Ή�����s�����Ă���ł��傤�B�����C���X�^���X�ɑ��ẮA
- �i��ID��Java��ID�Ƃ̊֘A�́AHibernate���ۏ��܂���B
+ この状態のインスタンスは、かつて永続コンテキストに関連づけられたが、
+ そのコンテキストがクローズされたか、あるいは、
+ 他のプロセスにそのインスタンスがシリアライズされたかです。
+ このインスタンスは、永続IDを持ち、たいていはデータベースに
+ 対応する行を持っているでしょう。分離インスタンスに対しては、
+ 永続IDとJavaのIDとの関連は、Hibernateが保証しません。
</para>
</listitem>
</varlistentry>
@@ -216,157 +218,157 @@
</sect1>
<sect1 id="architecture-jmx" revision="1">
- <title>JMX�Ƃ̓���</title>
+ <title>JMXとの統合</title>
<para>
- JMX��Java�R���|�[�l���g�Ǘ���J2EE�W���ł��B
- JMX�W���T�[�r�X��ʂ��āAHibernate�͊Ǘ�����܂��B
- �f�B�X�g���r���[�V�����̒��� <literal>org.hibernate.jmx.HibernateService</literal> �Ƃ���
- MBean������p�ӂ��Ă��܂��B
+ JMXはJavaコンポーネント管理のJ2EE標準です。
+ JMX標準サービスを通して、Hibernateは管理されます。
+ ディストリビューションの中に <literal>org.hibernate.jmx.HibernateService</literal> という
+ MBean実装を用意しています。
</para>
<para>
- JBoss �A�v���P�[�V�����T�[�o�[���Hibernate��JMX�T�[�r�X�Ƃ��ăf�v���C������@�̗�Ƃ��ẮA
- JBoss ���[�U�K�C�h��Q�Ƃ��Ă��������B JBoss �A�v���P�[�V�����T�[�o�[�ɂ����āA
- JMX��g���ăf�v���C����ƁA���̃����b�g�������܂��B
+ JBoss アプリケーションサーバー上にHibernateをJMXサービスとしてデプロイする方法の例としては、
+ JBoss ユーザガイドを参照してください。 JBoss アプリケーションサーバーにおいて、
+ JMXを使ってデプロイすると、次のメリットが得られます。
</para>
<itemizedlist>
<listitem>
<para>
- <emphasis>�Z�b�V�����Ǘ�:</emphasis> Hibernate�� <literal>Session</literal> �̃��C�t�T�C�N���́A
- �����I��JTA�g�����U�N�V�����̃X�R�[�v�Ɍ��т����܂��B����́A��͂�蓮��
- <literal>Session</literal> ��I�[�v��������A�N���[�Y�����肷��K�v���Ȃ����Ƃ�Ӗ����܂��B
- ����́AJBoss EJB �C���^�[�Z�v�^�̎d���ɂȂ�܂��B
- �܂��A�R�[�h�̂ǂ��Ńg�����U�N�V�������E��ݒ肷�邩�ɂ��āA
- ��͂�Y�ޕK�v������܂���i������ڐA�\�ȉi���w�������Ȃ��Ă����̂Ȃ�A
- �I�v�V������Hibernate�� <literal>Transaction</literal> ��g�p�����������B�j
- <literal>Session</literal> �ɃA�N�Z�X���邽�߂ɂ́A <literal>HibernateContext</literal> ��
- �R�[�������������B
+ <emphasis>セッション管理:</emphasis> Hibernateの <literal>Session</literal> のライフサイクルは、
+ 自動的にJTAトランザクションのスコープに結びつけられます。これは、もはや手動で
+ <literal>Session</literal> をオープンしたり、クローズしたりする必要がないことを意味します。
+ これは、JBoss EJB インターセプタの仕事になります。
+ また、コードのどこでトランザクション境界を設定するかについて、
+ もはや悩む必要がありません(もちろん移植可能な永続層を書かかなくていいのならば、
+ オプションのHibernateの <literal>Transaction</literal> を使用してください。)
+ <literal>Session</literal> にアクセスするためには、 <literal>HibernateContext</literal> を
+ コールしてください。
</para>
</listitem>
<listitem>
<para>
- <emphasis>HAR �f�v���C:</emphasis> �ʏ�A(EAR �܂��� SAR �t�@�C���ɂ���jJBoss �T�[�r�X
- �f�v���C�����g�f�B�X�N���v�^��g���āAHibernate JMX �T�[�r�X��f�v���C���܂��B
- ����́AHibernate�� <literal>SessionFactory</literal> �̑S�Ă̈�ʓI�Ȑݒ�I�v�V������
- �T�|�[�g���܂��B�������ˑR�Ƃ��ăf�v���C�����g�f�B�X�N���v�^�̂Ȃ��ɂ��ׂẴ}�b�s���O�t�@�C����
- ���O������K�v������܂��B
- ����A�I�v�V������HAR�f�v���C�����g��g�����Ƃ��߂��Ȃ�A
- JBoss�͎����I��HAR�t�@�C���̂Ȃ��̑S�Ẵ}�b�s���O�t�@�C�����o���܂��B
+ <emphasis>HAR デプロイ:</emphasis> 通常、(EAR または SAR ファイルにある)JBoss サービス
+ デプロイメントディスクリプタを使って、Hibernate JMX サービスをデプロイします。
+ それは、Hibernateの <literal>SessionFactory</literal> の全ての一般的な設定オプションを
+ サポートします。しかし依然としてデプロイメントディスクリプタのなかにすべてのマッピングファイルの
+ 名前を挙げる必要があります。
+ もし、オプションのHARデプロイメントを使うことを決めたなら、
+ JBossは自動的にHARファイルのなかの全てのマッピングファイルを検出します。
</para>
</listitem>
</itemizedlist>
<para>
- �����̃I�v�V�����ɂ��Ă̏ڍׂȏ��́AJBoss�A�v���P�[�V�����T�[�o���[�U�K�C�h��
- �Q�l�ɂ��Ă��������B
+ これらのオプションについての詳細な情報は、JBossアプリケーションサーバユーザガイドを
+ 参考にしてください。
</para>
<para>
- JMX�T�[�r�X�Ƃ��ė��p�\�ȑ��̋@�\�ɁAHibernate���s�����v�����܂��B
- <xref linkend="configuration-optional-statistics"/> �����������B
+ JMXサービスとして利用可能な他の機能に、Hibernate実行時統計情報があります。
+ <xref linkend="configuration-optional-statistics"/> を見てください。
</para>
</sect1>
<sect1 id="architecture-jca" revision="1">
- <title>JCA �T�|�[�g</title>
+ <title>JCA サポート</title>
<para>
- Hibernate �� JCA �R�l�N�^�Ƃ��Ă�ݒ�ł��܂��B�ڍׂɂ��ẮAWeb�T�C�g���Ă��������B
- Hibernate JCA �T�|�[�g�́A���̂Ƃ�������i�K�Ƃ��čl�����Ă��邱�Ƃɒ��ӂ��Ă��������B
+ Hibernate は JCA コネクタとしても設定できます。詳細については、Webサイトを見てください。
+ Hibernate JCA サポートは、今のところ実験段階として考えられていることに注意してください。
</para>
</sect1>
<sect1 id="architecture-current-session" revision="2">
- <title>�R���e�L�X�g��̃Z�b�V����</title>
+ <title>コンテキスト上のセッション</title>
<para>
- Hibernate ��g�����A�v���P�[�V�����́A�قƂ�ǁA�Ȃ�炩�̌`��"�R���e�L�X�g���"�Z�b�V�������K�v�ɂȂ�܂��B
- �u�R���e�L�X�g��̃Z�b�V�����v�́A����̃R���e�L�X�g�̃X�R�[�v�̂Ȃ��ŗL���ȃZ�b�V�����̂��Ƃł��B
- �������A�ʏ�A�v���P�[�V�������ƂɃR���e�L�X�g��\�������̂̒�`�͈قȂ�܂��B
- ������A�قȂ镡���̃R���e�L�X�g�́A�����_�ɑ��ĈقȂ�X�R�[�v���`���܂��B
- �o�[�W����3.0���O�� Hibernate �ł́A����� <literal>ThreadLocal</literal> �x�[�X�́u�R���e�L�X�g��̃Z�b�V�����v��
- ���p���邩�A <literal>HibernateUtil</literal> �̂悤�ȃw���p�[�N���X�𗘗p���邩�A
- proxy/interception �x�[�X�́u�R���e�L�X�g��̃Z�b�V�����v�����
- �iSpring �� Pico �̂悤�ȁj�T�[�h�p�[�e�B�̃t���[�����[�N�𗘗p���邩�̂����ꂩ�ł����B
+ Hibernate を使ったアプリケーションは、ほとんど、なんらかの形で"コンテキスト上の"セッションが必要になります。
+ 「コンテキスト上のセッション」は、特定のコンテキストのスコープのなかで有効なセッションのことです。
+ しかし、通常アプリケーションごとにコンテキストを構成するものの定義は異なります。
+ しかも、異なる複数のコンテキストは、現時点に対して異なるスコープを定義します。
+ バージョン3.0より前の Hibernate では、自作の <literal>ThreadLocal</literal> ベースの「コンテキスト上のセッション」を
+ 利用するか、 <literal>HibernateUtil</literal> のようなヘルパークラスを利用するか、
+ proxy/interception ベースの「コンテキスト上のセッション」を提供する
+ (Spring や Pico のような)サードパーティのフレームワークを利用するかのいずれかでした。
</para>
<para>
- �o�[�W���� 3.0.1 ����AHibernate �ɂ� <literal>SessionFactory.getCurrentSession()</literal> ��
- �����܂����B ����́A <literal>JTA</literal> �g�����U�N�V�����̎g�p��O��ɂ��Ă��܂��B
- <literal>JTA</literal> �g�����U�N�V�����́A���݂̃Z�b�V�����̃X�R�[�v�ƃR���e�L�X�g�̗������`���܂��B
- Hibernate �`�[���́A���̂��Ƃ�咣���܂��B
- ����ȃX�^���h�A������ <literal>JTA TransactionManager</literal> ���������n������A
- <literal>J2EE</literal> �R���e�i��Ƀf�v���C����邩�ǂ����ɂ�����炸�A
- �قƂ�ǂ́i���ׂĂƂ͌���Ȃ����j�A�v���P�[�V�������A
- <literal>JTA</literal> �g�����U�N�V�����Ǘ���g�p���ׂ��ł���ƁB
- ���̍l���Ɋ�Â��ƁA <literal>JTA</literal> �x�[�X�́u�R���e�L�X�g��̃Z�b�V�����v��
- �g�������Ȃ��ł��傤�B
+ バージョン 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> ベースの「コンテキスト上のセッション」を
+ 使うしかないでしょう。
</para>
<para>
- �������A�o�[�W���� 3.1 ����́A <literal>SessionFactory.getCurrentSession()</literal> �̌�̏������A
- �v���K�u���ɂȂ�܂����B
- �����āA���݂̃Z�b�V�������`����X�R�[�v�ƃR���e�L�X�g�̃v���K�r���e�B��\�ɂ��邽�߂ɁA
- �V�����g���C���^�t�F�[�X ( <literal>org.hibernate.context.CurrentSessionContext</literal> ) ��
- �V�����\���p�����[�^ ( <literal>hibernate.current_session_context_class</literal> ) ���lj�����܂����B
+ しかし、バージョン 3.1 からは、 <literal>SessionFactory.getCurrentSession()</literal> の後の処理が、
+ プラガブルになりました。
+ これを受けて、現在のセッションを定義するスコープとコンテキストのプラガビリティを可能にするために、
+ 新しい拡張インタフェース ( <literal>org.hibernate.context.CurrentSessionContext</literal> ) と
+ 新しい構成パラメータ ( <literal>hibernate.current_session_context_class</literal> ) が追加されました。
</para>
<para>
- <literal>org.hibernate.context.CurrentSessionContext</literal> �C���^�t�F�[�X�̋K��ɂ��Ă�
- �ڍׂȓ�e�� Javadoc ��Q�Ƃ��Ă��������B
- ����ɂ́A <literal>currentSession()</literal> �Ƃ���1�̃��\�b�h����`����Ă���A
- ���̎����́A���݂́u�R���e�L�X�g��̃Z�b�V�����v��ǐՂ��邱�ƂɐӔC�����܂��B
- ���̂܂g����悤�ɁAHibernate�͂��̃C���^�t�F�[�X�̎�����2���Ă��܂��B
+ <literal>org.hibernate.context.CurrentSessionContext</literal> インタフェースの規約についての
+ 詳細な内容は Javadoc を参照してください。
+ それには、 <literal>currentSession()</literal> という1つのメソッドが定義されており、
+ その実装は、現在の「コンテキスト上のセッション」を追跡することに責任を持ちます。
+ そのまま使えるように、Hibernateはこのインタフェースの実装を2つ提供しています。
</para>
<itemizedlist>
<listitem>
<para>
<literal>org.hibernate.context.JTASessionContext</literal> -
- <literal>JTA</literal> �g�����U�N�V�����ɂ���āA���݂̃Z�b�V�������ǐՂ���A
- �X�R�[�v���߂��܂��B���̏����́A�Â�JTA�����̃A�v���[�`�Ƃ܂����������ł��B
- �ڍׂ�Javadoc��Q�Ƃ��Ă��������B
+ <literal>JTA</literal> トランザクションによって、現在のセッションが追跡され、
+ スコープを決められます。この処理は、古いJTAだけのアプローチとまったく同じです。
+ 詳細はJavadocを参照してください。
</para>
</listitem>
<listitem>
<para>
<literal>org.hibernate.context.ThreadLocalSessionContext</literal> -
- �X���b�h�̎��s�ɂ���āA���݂̃Z�b�V�������ǐՂ���܂��B
- �ڍׂ�Javadoc��Q�Ƃ��Ă��������B
+ スレッドの実行によって、現在のセッションが追跡されます。
+ 詳細はJavadocを参照してください。
</para>
</listitem>
<listitem>
<para>
<literal>org.hibernate.context.ManagedSessionContext</literal> -
- �X���b�h�̎��s�ɂ���āA���݂̃Z�b�V�������ǐՂ���܂��B
- �������A���̃N���X��static���\�b�h�� <literal>Session</literal> �C���X�^���X��
- �o�C���h/�A���o�C���h����ӔC�͂��Ȃ��ɂ���܂��B
- ����͌����� <literal>Session</literal> ��I�[�v���A�t���b�V���A�N���[�Y���܂���B
+ スレッドの実行によって、現在のセッションが追跡されます。
+ しかし、このクラスのstaticメソッドで <literal>Session</literal> インスタンスを
+ バインド/アンバインドする責任はあなたにあります。
+ これは決して <literal>Session</literal> をオープン、フラッシュ、クローズしません。
</para>
</listitem>
</itemizedlist>
<para>
- �n�߂�2�̎����́A"1�Z�b�V���� - 1�f�[�^�x�[�X�g�����U�N�V����" �v���O���~���O���f������܂��B
- ����� <emphasis>���N�G�X�g���Ƃ̃Z�b�V�����isession-per-request�j</emphasis> �Ƃ��Ă�m���Ă���A�g���Ă��܂��B
- Hibernate �Z�b�V�����̊J�n�ƏI���́A�f�[�^�x�[�X�g�����U�N�V�����̊��ԂŌ��܂�܂��B
- JTA��g��Ȃ����ʂ�JSE�ŁA�v���O������̃g�����U�N�V�������E�ݒ��s���Ȃ�A
- �R�[�h�����b�̃g�����U�N�V�����V�X�e����B�����邽�߂ɁA
- Hibernate <literal>Transaction</literal> API��g���Ƃ悢�ł��傤�B
- JTA��g���Ȃ�A�g�����U�N�V�����̋��E�ݒ�ɂ́AJTA�C���^�[�t�F�C�X��g���Ă��������B
- CMT��T�|�[�g����EJB�R���e�i�Ŏ��s������Ȃ�A�g�����U�N�V�������E�͐錾�I�ɒ�`�ł��邽�߁A
- �R�[�h��Ńg�����U�N�V������Z�b�V�����̋��E��ݒ肷��K�v�͂���܂���B
- ����ɏڍׂȏ���R�[�h�̗�́A <xref linkend="transactions"/> ��Q�Ƃ��Ă��������B
+ 始めの2つの実装は、"1セッション - 1データベーストランザクション" プログラミングモデルを提供します。
+ これは <emphasis>リクエストごとのセッション(session-per-request)</emphasis> としても知られており、使われています。
+ Hibernate セッションの開始と終了は、データベーストランザクションの期間で決まります。
+ JTAを使わない普通のJSEで、プログラム上のトランザクション境界設定を行うなら、
+ コードから基礎のトランザクションシステムを隠蔽するために、
+ Hibernate <literal>Transaction</literal> APIを使うとよいでしょう。
+ JTAを使うなら、トランザクションの境界設定には、JTAインターフェイスを使ってください。
+ CMTをサポートするEJBコンテナで実行するつもりなら、トランザクション境界は宣言的に定義できるため、
+ コード上でトランザクションやセッションの境界を設定する必要はありません。
+ さらに詳細な情報やコードの例は、 <xref linkend="transactions"/> を参照してください。
</para>
<para>
- <literal>hibernate.current_session_context_class</literal> �ݒ�p�����[�^�́A
- <literal>org.hibernate.context.CurrentSessionContext</literal> �̂ǂ̎�����g������w�肵�܂��B
- ���ʌ݊����̂��߁A���̃p�����[�^���ݒ肳�ꂸ
- <literal>org.hibernate.transaction.TransactionManagerLookup</literal> ���ݒ肳��Ă����ꍇ�A
- Hibernate�� <literal>org.hibernate.context.JTASessionContext</literal> ��g�����Ƃɒ��ӂ��Ă��������B
- �ʏ킱�̃p�����[�^�̒l�ɂ́A3�̎����̒�����g�p��������N���X�̖��O�ڎw�肵�܂��B
- �������A"jta", "thread", "managed"�Ƃ������ꂼ��̏ȗ�����p�ӂ���Ă��܂��B
+ <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> を使うことに注意してください。
+ 通常このパラメータの値には、3つの実装の中から使用する実装クラスの名前を直接指定します。
+ しかし、"jta", "thread", "managed"というそれぞれの省略名も用意されています。
</para>
</sect1>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/association_mapping.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/association_mapping.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/association_mapping.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,39 +1,41 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="associations">
- <title>�֘A�}�b�s���O</title>
+ <title>関連マッピング</title>
<sect1 id="assoc-intro" revision="1">
- <title>�C���g���_�N�V����</title>
+ <title>イントロダクション</title>
<para>
- �֘A�}�b�s���O�͂����Η����ł�����̂ɂȂ�܂��B
- ���̏͂ł́A��{�I�Ȉ��̃P�[�X�ɂ��ďq�ׂ܂��B
- �P�����̃}�b�s���O����n�߁A���ꂩ��o�����̃P�[�X�ɂ��čl���Ă����܂��B
- ��Ƃ��āA<literal>Person</literal> �� <literal>Address</literal> ��p���܂��B
+ 関連マッピングはしばしば理解が最も難しいものになります。
+ この章では、基本的な一つ一つのケースについて述べます。
+ 単方向のマッピングから始め、それから双方向のケースについて考えていきます。
+ 例として、<literal>Person</literal> と <literal>Address</literal> を用います。
</para>
<para>
- �֘A�́A�����e�[�u�������邩���ǂ����ƁA
- ���d�x�ɂ���ĕ��ނ��邱�Ƃɂ��܂��B
+ 関連は、結合テーブルを入れるかかどうかと、
+ 多重度によって分類することにします。
</para>
<para>
- ���ׂĂ̗��not null�̊O���L�[��g�p���܂��B
- �����Hibernate�̗v���ł͂���܂���B
- not null�����O�����Ƃ��Ă�A�}�b�s���O�͖��Ȃ����삵�܂��B
+ すべての例でnot nullの外部キーを使用します。
+ これはHibernateの要件ではありません。
+ not null制約を外したとしても、マッピングは問題なく動作します。
</para>
</sect1>
<sect1 id="assoc-unidirectional" revision="1">
- <title>�P�����֘A</title>
+ <title>単方向関連</title>
<sect2 id="assoc-unidirectional-m21">
- <title>���Έ�</title>
+ <title>多対一</title>
<para>
- <emphasis>�P�������Έ�֘A</emphasis> �͒P�����֘A�̒��ōł��ʓI�Ȃ�̂ł��B
+ <emphasis>単方向多対一関連</emphasis> は単方向関連の中で最も一般的なものです。
</para>
<programlisting><![CDATA[<class name="Person">
@@ -58,11 +60,11 @@
</sect2>
<sect2 id="assoc-unidirectional-121">
- <title>��Έ�</title>
+ <title>一対一</title>
<para>
- <emphasis>�O���L�[�̒P������Έ�֘A</emphasis> �͂قƂ�Ǔ�����̂ł��B
- �B��Ⴄ�̂́A�J�����̃��j�[�N�Ȑ���ł��B
+ <emphasis>外部キーの単方向一対一関連</emphasis> はほとんど同じものです。
+ 唯一違うのは、カラムのユニークな制約です。
</para>
<programlisting><![CDATA[<class name="Person">
@@ -86,8 +88,8 @@
]]></programlisting>
<para>
- <emphasis>��L�[�̒P������Έ�֘A</emphasis> �͒ʏ�A���ʂ�ID�W�F�l���[�^��g���܂��B
- �i���̗�ł͊֘A�̕������t�ɂȂ��Ă��邱�Ƃɒ��ӂ��Ă��������j
+ <emphasis>主キーの単方向一対一関連</emphasis> は通常、特別なIDジェネレータを使います。
+ (この例では関連の方向が逆になっていることに注意してください)
</para>
<programlisting><![CDATA[<class name="Person">
@@ -112,11 +114,11 @@
</sect2>
<sect2 id="assoc-unidirectional-12m">
- <title>��Α�</title>
+ <title>一対多</title>
<para>
- <emphasis>�O���L�[�̒P������Α��֘A</emphasis> �͂ƂĂ����ȃP�[�X�ŁA
- ���܂萄������Ă��܂���B
+ <emphasis>外部キーの単方向一対多関連</emphasis> はとても特殊なケースで、
+ あまり推奨されていません。
</para>
<programlisting><![CDATA[<class name="Person">
@@ -141,7 +143,7 @@
]]></programlisting>
<para>
- ���̂悤�Ȋ֘A�̂��߂Ɍ����e�[�u����g�����Ƃ��E�߂��܂��B
+ このような関連のために結合テーブルを使うことをお薦めします。
</para>
</sect2>
@@ -149,16 +151,16 @@
</sect1>
<sect1 id="assoc-unidirectional-join" revision="1">
- <title>�����e�[�u����g�����P�����֘A</title>
+ <title>結合テーブルを使った単方向関連</title>
<sect2 id="assoc-unidirectional-join-12m">
- <title>��Α�</title>
+ <title>一対多</title>
<para>
- <emphasis>�����e�[�u����g�����P������Α��֘A</emphasis>
- �͂��D�܂����ł��B
- <literal>unique="true"</literal> �̎w��ɂ��A���d�x�����Α������Α�
- �ɕς�������Ƃɒ��ӂ��ĉ������B
+ <emphasis>結合テーブルを使った単方向一対多関連</emphasis>
+ はより好ましいです。
+ <literal>unique="true"</literal> の指定により、多重度が多対多から一対多
+ に変わったことに注意して下さい。
</para>
<programlisting><![CDATA[<class name="Person">
@@ -187,11 +189,11 @@
</sect2>
<sect2 id="assoc-unidirectional-join-m21">
- <title>���Έ�</title>
+ <title>多対一</title>
<para>
- <emphasis>�����e�[�u���̒P�������Έ�֘A</emphasis> ��
- �֘A���C�ӂł���Ƃ��ɔ��Ɉ�ʓI�Ȃ�̂ł��B
+ <emphasis>結合テーブルの単方向多対一関連</emphasis> は
+ 関連が任意であるときに非常に一般的なものです。
</para>
<programlisting><![CDATA[<class name="Person">
@@ -221,11 +223,11 @@
</sect2>
<sect2 id="assoc-unidirectional-join-121">
- <title>��Έ�</title>
+ <title>一対一</title>
<para>
- <emphasis>�����e�[�u���̒P������Έ�֘A</emphasis> �́A�{���ɓ���ł���
- �s�\�ł͂���܂���B
+ <emphasis>結合テーブルの単方向一対一関連</emphasis> は、本当に特殊ですが
+ 不可能ではありません。
</para>
<programlisting><![CDATA[<class name="Person">
@@ -257,10 +259,10 @@
</sect2>
<sect2 id="assoc-unidirectional-join-m2m">
- <title>���Α�</title>
+ <title>多対多</title>
<para>
- �Ō�ɁA<emphasis>�P�������Α��֘A</emphasis> �����܂��B
+ 最後に、<emphasis>単方向多対多関連</emphasis> を示します。
</para>
<programlisting><![CDATA[<class name="Person">
@@ -290,14 +292,14 @@
</sect1>
<sect1 id="assoc-bidirectional" revision="1">
- <title>�o�����֘A</title>
+ <title>双方向関連</title>
<sect2 id="assoc-bidirectional-m21" revision="2">
- <title>��Α�/���Έ�</title>
+ <title>一対多/多対一</title>
<para>
- <emphasis>�o�������Έ�֘A</emphasis> �͍ł��ʓI�Ȋ֘A�ł��B
- �i�W���I�Ȑe�q�W�ł��j
+ <emphasis>双方向多対一関連</emphasis> は最も一般的な関連です。
+ (標準的な親子関係です)
</para>
<programlisting><![CDATA[<class name="Person">
@@ -325,12 +327,12 @@
]]></programlisting>
<para>
- <literal>List</literal> �i�܂��͑��̃C���f�b�N�X�t���̃R���N�V�����j��g���Ȃ�A
- �O���L�[�� <literal>key</literal> �J������ <literal>not null</literal> �ɐݒ肵�A
- �R���N�V���������e�v�f�̃C���f�b�N�X�����e�i���X����悤�ɁA
- �֘A�����K�v������܂�
- �i<literal>update="false"</literal> ���� <literal>insert="false"</literal>
- �Ɛݒ肵�āA���Α����z�I��inverse�ɂ��܂��j�F
+ <literal>List</literal> (または他のインデックス付きのコレクション)を使うなら、
+ 外部キーの <literal>key</literal> カラムを <literal>not null</literal> に設定し、
+ コレクション側が各要素のインデックスをメンテナンスするように、
+ 関連を扱う必要があります
+ (<literal>update="false"</literal> かつ <literal>insert="false"</literal>
+ と設定して、反対側を仮想的にinverseにします):
</para>
<programlisting><![CDATA[<class name="Person">
@@ -354,21 +356,21 @@
</class>]]></programlisting>
<para>
- ����O���L�[�J������ <literal>NOT NULL</literal> �ł���Ȃ�A
- �R���N�V�����}�b�s���O�� <literal><key></literal> �v�f��
- <literal>not-null="true"</literal> �ɂ��邱�Ƃ͏d�v�ł��B
- ����q�ɂȂ��� <literal><column></literal> �v�f�����ł͂Ȃ��A
- <literal><key></literal> �v�f�� <literal>not-null="true"</literal>
- �ƒ�`���Ȃ��悤�ɂ��Ă��������B
+ もし外部キーカラムが <literal>NOT NULL</literal> であるならば、
+ コレクションマッピングの <literal><key></literal> 要素を
+ <literal>not-null="true"</literal> にすることは重要です。
+ 入れ子になった <literal><column></literal> 要素だけではなく、
+ <literal><key></literal> 要素も <literal>not-null="true"</literal>
+ と定義しないようにしてください。
</para>
</sect2>
<sect2 id="assoc-bidirectional-121">
- <title>��Έ�</title>
+ <title>一対一</title>
<para>
- <emphasis>�O���L�[�̑o������Έ�֘A</emphasis> �͔��Ɉ�ʓI�ł��B
+ <emphasis>外部キーの双方向一対一関連</emphasis> は非常に一般的です。
</para>
<programlisting><![CDATA[<class name="Person">
@@ -394,7 +396,7 @@
]]></programlisting>
<para>
- <emphasis>��L�[�̑o������Έ�֘A</emphasis> �͓����ID�W�F�l���[�^��g���܂��B
+ <emphasis>主キーの双方向一対一関連</emphasis> は特殊なIDジェネレータを使います。
</para>
<programlisting><![CDATA[<class name="Person">
@@ -423,15 +425,15 @@
</sect1>
<sect1 id="assoc-bidirectional-join" revision="1">
- <title>�����e�[�u����g�����o�����֘A</title>
+ <title>結合テーブルを使った双方向関連</title>
<sect2 id="assoc-bidirectional-join-12m">
- <title>��Α�/���Έ�</title>
+ <title>一対多/多対一</title>
<para>
- <emphasis>�����e�[�u���̑o������Α��֘A</emphasis> �ł��B
- <literal>inverse="true"</literal> ���֘A�[�A�R���N�V�����A�����̂����ꂩ��
- �ݒ�ł��邱�Ƃɒ��ӂ��Ă��������B
+ <emphasis>結合テーブルの双方向一対多関連</emphasis> です。
+ <literal>inverse="true"</literal> が関連端、コレクション、結合のいずれかに
+ 設定できることに注意してください。
</para>
<programlisting><![CDATA[<class name="Person">
@@ -469,11 +471,11 @@
</sect2>
<sect2 id="assoc-bidirectional-join-121">
- <title>��Έ�</title>
+ <title>一対一</title>
<para>
- <emphasis>�����e�[�u���̑o������Έ�֘A</emphasis>
- �͔��ɓ���ł����A�\�ł��B
+ <emphasis>結合テーブルの双方向一対一関連</emphasis>
+ は非常に特殊ですが、可能です。
</para>
<programlisting><![CDATA[<class name="Person">
@@ -515,10 +517,10 @@
</sect2>
<sect2 id="assoc-bidirectional-join-m2m" revision="1">
- <title>���Α�</title>
+ <title>多対多</title>
<para>
- �Ō�ɁA<emphasis>�o�������Α��֘A</emphasis> �����܂��B
+ 最後に、<emphasis>双方向多対多関連</emphasis> を示します。
</para>
<programlisting><![CDATA[<class name="Person">
@@ -554,15 +556,15 @@
</sect1>
<sect1 id="assoc-complex">
- <title>��蕡�G�Ȋ֘A�}�b�s���O</title>
+ <title>より複雑な関連マッピング</title>
<para>
- ��蕡�G�Ȋ֘A������ <emphasis>�ɂ߂�</emphasis> �H�ł��B
- �}�b�s���O�h�L�������g��SQL���ߍ��ނ��ƂŁA
- ����ɕ��G�ȏ������Ƃ��ł��܂��B
- �Ⴆ�A<literal>accountNumber</literal>, <literal>effectiveEndDate</literal>,
- <literal>effectiveStartDate</literal> �J��������account�i�����j���̗�������e�[�u���́A
- �ȉ��̂悤�Ƀ}�b�s���O���܂��B
+ より複雑な関連結合は <emphasis>極めて</emphasis> 稀です。
+ マッピングドキュメントにSQL文を埋め込むことで、
+ さらに複雑な状況を扱うことができます。
+ 例えば、<literal>accountNumber</literal>, <literal>effectiveEndDate</literal>,
+ <literal>effectiveStartDate</literal> カラムを持つaccount(口座)情報の履歴を扱うテーブルは、
+ 以下のようにマッピングします。
</para>
<programlisting><![CDATA[<properties name="currentAccountKey">
@@ -575,9 +577,9 @@
<property name="effectiveStateDate" type="date" not-null="true"/>]]></programlisting>
<para>
- �����āA�֘A�� <emphasis>�����_��</emphasis> �C���X�^���X
- �i<literal>effectiveEndDate</literal> ��null�ł����́j�Ƀ}�b�s���O���܂��B
- �ȉ��̂悤�ɂȂ�܂��F
+ そして、関連を <emphasis>現時点の</emphasis> インスタンス
+ (<literal>effectiveEndDate</literal> がnullであるもの)にマッピングします。
+ 以下のようになります:
</para>
<programlisting><![CDATA[<many-to-one name="currentAccountInfo"
@@ -588,11 +590,11 @@
</many-to-one>]]></programlisting>
<para>
- ����ɕ��G�ȗ�ł́A<literal>Employee�i�]�ƈ��j</literal> �� <literal>Organization�i�g�D�j</literal>
- �Ԃ̊֘A�� <literal>Employment�i�ٗp�j</literal> �e�[�u���ŕێ������ꍇ��z�����Ă��������B
- ���̃e�[�u���ɂ͌ٗp�f�[�^�̗������ׂĊ܂܂�܂��B
- ����Ə]�ƈ��� <emphasis>�ł�ŋ߂�</emphasis> �ٗp�҂�\���֘A
- �i�ł�ŋ߂� <literal>startDate</literal> ����́j�́A���̂悤�Ƀ}�b�s���O�ł��܂��F
+ さらに複雑な例では、<literal>Employee(従業員)</literal> と <literal>Organization(組織)</literal>
+ 間の関連が <literal>Employment(雇用)</literal> テーブルで保持される場合を想像してください。
+ このテーブルには雇用データの履歴がすべて含まれます。
+ すると従業員の <emphasis>最も最近の</emphasis> 雇用者を表す関連
+ (最も最近の <literal>startDate</literal> を持つもの)は、このようにマッピングできます:
</para>
<programlisting><![CDATA[<join>
@@ -609,8 +611,8 @@
</join>]]></programlisting>
<para>
- ���̋@�\�͔��ɋ��͂ł��B
- ���������̂悤�ȏꍇ�A���ʂ�HQL��criteria�N�G����g�����������H�I�ł��B
+ この機能は非常に強力です。
+ しかしこのような場合、普通はHQLやcriteriaクエリを使う方がより実践的です。
</para>
</sect1>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/basic_mapping.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/basic_mapping.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/basic_mapping.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,25 +1,26 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="mapping">
- <title>��{�I��O/R�}�b�s���O</title>
+ <title>基本的なO/Rマッピング</title>
<sect1 id="mapping-declaration" revision="1">
- <title>�}�b�s���O��`</title>
+ <title>マッピング定義</title>
<para>
- �I�u�W�F�N�g/�����[�V���i���}�b�s���O�͒ʏ�XML�h�L�������g�Œ�`���܂��B
- �}�b�s���O�h�L�������g�́A�ǂ݂₷�����ƂŕҏW���₷���悤�Ƀf�U�C������Ă��܂��B
- �}�b�s���O�����Java���S�A�܂�e�[�u����`�ł͂Ȃ��i���N���X�̒�`�Ɋ�Â��č\�z����Ă��܂��B
+ オブジェクト/リレーショナルマッピングは通常XMLドキュメントで定義します。
+ マッピングドキュメントは、読みやすく手作業で編集しやすいようにデザインされています。
+ マッピング言語はJava中心、つまりテーブル定義ではなく永続クラスの定義に基づいて構築されています。
</para>
<para>
- ������Hibernate���[�U��XML�}�b�s���O�̋L�q����Ƃōs���܂����A
- XDoclet, Middlegen, AndroMDA�Ƃ����悤�ȃ}�b�s���O�h�L�������g������c�[����
- ���������݂��܂��B
+ 多くのHibernateユーザはXMLマッピングの記述を手作業で行いますが、
+ XDoclet, Middlegen, AndroMDAというようなマッピングドキュメントを生成するツールが
+ いくつか存在します。
</para>
<para>
- �T���v���̃}�b�s���O����n�߂܂��傤�F
+ サンプルのマッピングから始めましょう:
</para>
<programlisting id="mapping-declaration-ex1" revision="1"><![CDATA[<?xml version="1.0"?>
@@ -82,16 +83,16 @@
</class>
<class name="Dog">
- <!-- ������Dog�p�̃}�b�s���O�����܂� -->
+ <!-- ここにDog用のマッピング書きます -->
</class>
</hibernate-mapping>]]></programlisting>
<para>
- �}�b�s���O�h�L�������g�̓�e�������܂��B�B
- �������A�����ł�Hibernate�����s���Ɏg���h�L�������g�v�f�Ƒ����ɂ��Ă̂ݐ�����܂��B
- �}�b�s���O�h�L�������g�́A�������̃I�v�V���������Ɨv�f��܂�ł��܂��i�Ⴆ�� <literal>not-null</literal> �����j�B
- �����̓X�L�[�}�G�N�X�|�[�g�c�[�����o�͂���f�[�^�x�[�X�X�L�[�}�ɉe����^�����̂ł��B
+ マッピングドキュメントの内容を説明します。。
+ ただし、ここではHibernateが実行時に使うドキュメント要素と属性についてのみ説明します。
+ マッピングドキュメントは、いくつかのオプション属性と要素を含んでいます(例えば <literal>not-null</literal> 属性)。
+ それらはスキーマエクスポートツールが出力するデータベーススキーマに影響を与えるものです。
</para>
@@ -101,51 +102,51 @@
<title>Doctype</title>
<para>
- XML�}�b�s���O�ł́A�����������悤�ȃh�L�������g�^��K����`���ׂ��ł��B
- ���ۂ�DTD�́A��L��URL�� <literal>hibernate-x.x.x/src/org/hibernate</literal> �f�B���N�g���A �܂���
- <literal>hibernate.jar</literal> ��ɂ���܂��B
- Hibernate�͏�ɁA���̃N���X�p�X���DTD��T���n�߂܂��B
- �C���^�[�l�b�g�ɂ���DTD�t�@�C����T�����Ƃ����Ȃ�A
- �N���X�p�X�̓�e���āADTD�錾��m�F���Ă��������B
+ XMLマッピングでは、お見せしたようなドキュメント型を必ず定義すべきです。
+ 実際のDTDは、上記のURLの <literal>hibernate-x.x.x/src/org/hibernate</literal> ディレクトリ、 または
+ <literal>hibernate.jar</literal> 内にあります。
+ Hibernateは常に、そのクラスパス内でDTDを探し始めます。
+ インターネットにあるDTDファイルを探そうとしたなら、
+ クラスパスの内容を見て、DTD宣言を確認してください。
</para>
<sect3 id="mapping-declaration-entity-resolution">
<title>
- �G���e�B�e�B�E���]���o
+ エンティティ・リゾルバ
</title>
<para>
- �O�q�����悤�ɁAHibernate�͂܂��N���X�p�X���DTD������悤�Ƃ��܂��B
- <literal>org.xml.sax.EntityResolver</literal> �̃J�X�^��������
- XML�t�@�C����ǂݍ��ނ��߂�SAXReader�ɓo�^���邱�Ƃɂ���āADTD������܂��B
- ���̃J�X�^���� <literal>EntityResolver</literal> ��2�̈قȂ�V�X�e��ID���O��Ԃ�F�����܂��B
+ 前述したように、Hibernateはまずクラスパス内でDTDを解決しようとします。
+ <literal>org.xml.sax.EntityResolver</literal> のカスタム実装を
+ XMLファイルを読み込むためのSAXReaderに登録することによって、DTDを解決します。
+ このカスタムの <literal>EntityResolver</literal> は2つの異なるシステムID名前空間を認識します。
</para>
<itemizedlist>
<listitem>
<para>
- <literal>Hibernate���O���</literal> �́A���]���o��
- <literal>http://hibernate.sourceforge.net/</literal> �Ŏn�܂�V�X�e��ID�ɓ��B�����Ƃ��ɁA
- �F������܂��B
- �����ă��]���o�́AHibernate�̃N���X���[�h�����N���X���[�_��p���āA
- �����̃G���e�B�e�B������悤�Ƃ��܂��B
+ <literal>Hibernate名前空間</literal> は、リゾルバが
+ <literal>http://hibernate.sourceforge.net/</literal> で始まるシステムIDに到達したときに、
+ 認識されます。
+ そしてリゾルバは、Hibernateのクラスをロードしたクラスローダを用いて、
+ これらのエンティティを解決しようとします。
</para>
</listitem>
<listitem>
<para>
- <literal>���[�U���O���</literal> �́A���]���o��
- URL�v���g�R���� <literal>classpath://</literal> ��g�����V�X�e��ID�ɓ��B�����Ƃ��ɁA
- �F������܂��B�����ă��]���o�́A(1)�J�����g�X���b�h�̃R���e�L�X�g�N���X���[�_�[�A
- �܂���(2)Hibernate�̃N���X���[�h�����N���X���[�_��g���āA
- �����̃G���e�B�e�B������悤�Ƃ��܂��B
+ <literal>ユーザ名前空間</literal> は、リゾルバが
+ URLプロトコルの <literal>classpath://</literal> を使ったシステムIDに到達したときに、
+ 認識されます。そしてリゾルバは、(1)カレントスレッドのコンテキストクラスローダー、
+ または(2)Hibernateのクラスをロードしたクラスローダを使って、
+ これらのエンティティを解決しようとします。
</para>
</listitem>
</itemizedlist>
<para>
- ���L�́A���[�U���O��Ԃ�g������ł��F
+ 下記は、ユーザ名前空間を使った例です:
</para>
<programlisting><![CDATA[<?xml version="1.0"?>
@@ -164,8 +165,8 @@
&types;
</hibernate-mapping>]]></programlisting>
<para>
- ������ <literal>types.xml</literal> �� <literal>your.domain</literal> �p�b�P�[�W��̃��\�[�X�ł���A
- �J�X�^�� <xref linkend="mapping-types-custom">typedef</xref> ��܂ނ܂��B
+ ここで <literal>types.xml</literal> は <literal>your.domain</literal> パッケージ内のリソースであり、
+ カスタム <xref linkend="mapping-types-custom">typedef</xref> を含むます。
</para>
</sect3>
@@ -176,14 +177,14 @@
<title>hibernate-mapping</title>
<para>
- ���̗v�f�ɂ͂������I�v�V��������������܂��B<literal>schema</literal> ������ <literal>catalog</literal> �����́A
- ���̃}�b�s���O���Q�Ƃ���e�[�u�����A���̑����ɂ���Ďw�肳�ꂽ�X�L�[�}��(�܂���)�J�^���O�ɑ����邱�Ƃ�w�肵�܂��B
- ���̑������w�肳���ƁA�e�[�u�����͗^����ꂽ�X�L�[�}���ƃJ�^���O���ŏC������܂��B�����̑������w�肳��Ă��Ȃ���A
- �e�[�u�����͏C������܂���B<literal>default-cascade</literal> �����́A
- <literal>cascade</literal> ������w�肵�Ă��Ȃ��v���p�e�B��R���N�V�����ɁA
- �ǂ̃J�X�P�[�h�X�^�C�����蓖�Ă邩��w�肵�܂��B
- <literal>auto-import</literal> �����́A
- �N�G�������ŏC������Ă��Ȃ��N���X����A�f�t�H���g�Ŏg����悤�ɂ��܂��B
+ この要素にはいくつかオプション属性があります。<literal>schema</literal> 属性と <literal>catalog</literal> 属性は、
+ このマッピングが参照するテーブルが、この属性によって指定されたスキーマと(または)カタログに属することを指定します。
+ この属性が指定されると、テーブル名は与えられたスキーマ名とカタログ名で修飾されます。これらの属性が指定されていなければ、
+ テーブル名は修飾されません。<literal>default-cascade</literal> 属性は、
+ <literal>cascade</literal> 属性を指定していないプロパティやコレクションに、
+ どのカスケードスタイルを割り当てるかを指定します。
+ <literal>auto-import</literal> 属性は、
+ クエリ言語内で修飾されていないクラス名を、デフォルトで使えるようにします。
</para>
<programlistingco>
@@ -208,62 +209,62 @@
<calloutlist>
<callout arearefs="hm1">
<para>
- <literal>schema</literal>�i�I�v�V�����j�F�f�[�^�x�[�X�X�L�[�}�̖��O�B
+ <literal>schema</literal>(オプション):データベーススキーマの名前。
</para>
</callout>
<callout arearefs="hm2">
<para>
- <literal>catalog</literal> �i�I�v�V�����j�F�f�[�^�x�[�X�J�^���O�̖��O�B
+ <literal>catalog</literal> (オプション):データベースカタログの名前。
</para>
</callout>
<callout arearefs="hm3">
<para>
- <literal>default-cascade</literal> �i�I�v�V���� - �f�t�H���g�� <literal>none</literal>�j�F
- �f�t�H���g�̃J�X�P�[�h�X�^�C���B
+ <literal>default-cascade</literal> (オプション - デフォルトは <literal>none</literal>):
+ デフォルトのカスケードスタイル。
</para>
</callout>
<callout arearefs="hm4">
<para>
- <literal>default-access</literal> (�I�v�V���� - �f�t�H���g�� <literal>property</literal> �j�F
- Hibernate���v���p�e�B�ɃA�N�Z�X����ۂɍ̂�ׂ��헪�B <literal>PropertyAccessor</literal>
- ��������邱�ƂŃJ�X�^�}�C�Y�\�B
+ <literal>default-access</literal> (オプション - デフォルトは <literal>property</literal> ):
+ Hibernateがプロパティにアクセスする際に採るべき戦略。 <literal>PropertyAccessor</literal>
+ を実装することでカスタマイズ可能。
</para>
</callout>
<callout arearefs="hm5">
<para>
- <literal>default-lazy</literal> (�I�v�V���� - �f�t�H���g�� <literal>true</literal> )�F
- <literal>lazy</literal> �������w�肳��Ă��Ȃ��N���X��R���N�V�����}�b�s���O�ɑ���f�t�H���g�l�B
+ <literal>default-lazy</literal> (オプション - デフォルトは <literal>true</literal> ):
+ <literal>lazy</literal> 属性が指定されていないクラスやコレクションマッピングに対するデフォルト値。
</para>
</callout>
<callout arearefs="hm6">
<para>
- <literal>auto-import</literal> �i�I�v�V���� - �f�t�H���g�� <literal>true</literal>�j�F
- �N�G�������ŁA�i���̃}�b�s���O��̃N���X�́j�C������Ă��Ȃ��N���X����g���邩�ǂ�����w�肵�܂��B
+ <literal>auto-import</literal> (オプション - デフォルトは <literal>true</literal>):
+ クエリ言語内で、(このマッピング内のクラスの)修飾されていないクラス名を使えるかどうかを指定します。
</para>
</callout>
<callout arearefs="hm7">
<para>
- <literal>package</literal> (�I�v�V����): �}�b�s���O�h�L�������g��ŏC������Ă��Ȃ��N���X���ɑ��Ċ��蓖�Ă�A
- �p�b�P�[�W�̐ړ���(prefix)��w�肵�܂��B
+ <literal>package</literal> (オプション): マッピングドキュメント内で修飾されていないクラス名に対して割り当てる、
+ パッケージの接頭辞(prefix)を指定します。
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- �i�C������Ă��Ȃ��j�������O�̉i���N���X��2����Ȃ�A
- <literal>auto-import="false"</literal> ��ݒ肷�ׂ��ł��B
- 2�̃N���X�Ɂh�C���|�[�g���ꂽ�h�������O���蓖�Ă悤�Ƃ���ƁAHibernate�͗�O�𓊂��܂��B
+ (修飾されていない)同じ名前の永続クラスが2つあるなら、
+ <literal>auto-import="false"</literal> を設定すべきです。
+ 2つのクラスに”インポートされた”同じ名前を割り当てようとすると、Hibernateは例外を投げます。
</para>
<para>
- <literal>hibernate-mapping</literal> �v�f�́A�ŏ��̗�Ŏ������悤�ɂ������̉i�� <literal><class></literal>
- �}�b�s���O��l�X�g�ł��܂��B
- �������A�P�̃}�b�s���O�t�@�C���ł͂����ЂƂ̉i���N���X(�܂��͂ЂƂ̃N���X�K�w)�Ƀ}�b�s���O����悤�ɂ��A
- ����ɉi���X�[�p�[�N���X�̌�Ŏw�肷��ׂ��ł��傤(�������̃c�[���͂��̂悤�ȃ}�b�s���O�t�@�C����z�肵�Ă��܂�)�B
- �Ⴆ�Ύ��̂悤�ɂȂ�܂��B�F <literal>Cat.hbm.xml</literal> ,
- <literal>Dog.hbm.xml</literal> , �܂��͌p����g���Ȃ� <literal>Animal.hbm.xml</literal> �B
+ <literal>hibernate-mapping</literal> 要素は、最初の例で示したようにいくつかの永続 <literal><class></literal>
+ マッピングをネストできます。
+ しかし、1つのマッピングファイルではただひとつの永続クラス(またはひとつのクラス階層)にマッピングするようにし、
+ さらに永続スーパークラスの後で指定するべきでしょう(いくつかのツールはこのようなマッピングファイルを想定しています)。
+ 例えば次のようになります。: <literal>Cat.hbm.xml</literal> ,
+ <literal>Dog.hbm.xml</literal> , または継承を使うなら <literal>Animal.hbm.xml</literal> 。
</para>
</sect2>
@@ -272,7 +273,7 @@
<title>class</title>
<para>
- <literal>class</literal> �v�f��g���āA�i���N���X��錾�ł��܂��B
+ <literal>class</literal> 要素を使って、永続クラスを宣言できます。
</para>
<programlistingco>
@@ -328,140 +329,140 @@
<calloutlist>
<callout arearefs="class1">
<para>
- <literal>name</literal> (�I�v�V����)�F�i���N���X�i�܂��̓C���^�[�t�F�C�X�j�̊��S�C��Java�N���X���B
- ������̑�����w�肵�Ȃ���APOJO�ł͂Ȃ��G���e�B�e�B�ɑ���}�b�s���O�Ƃ��Ĉ����܂��B
+ <literal>name</literal> (オプション):永続クラス(またはインターフェイス)の完全修飾Javaクラス名。
+ もしこの属性を指定しなければ、POJOではないエンティティに対するマッピングとして扱われます。
</para>
</callout>
<callout arearefs="class2">
<para>
- <literal>table</literal> (�I�v�V���� - �f�t�H���g�͏C������Ă��Ȃ��N���X��)�F�f�[�^�x�[�X�e�[�u���̖��O
+ <literal>table</literal> (オプション - デフォルトは修飾されていないクラス名):データベーステーブルの名前
</para>
</callout>
<callout arearefs="class3">
<para>
- <literal>discriminator-value</literal> (�I�v�V���� - �f�t�H���g�̓N���X��)�F
- �|�����[�t�B�b�N�ȐU�镑���Ɏg����X�̃T�u�N���X���ʂ��邽�߂̒l�B
- �l�� <literal>null</literal> �� <literal>not null</literal> �̂����ꂩ����܂��B
+ <literal>discriminator-value</literal> (オプション - デフォルトはクラス名):
+ ポリモーフィックな振る舞いに使われる個々のサブクラスを識別するための値。
+ 値は <literal>null</literal> か <literal>not null</literal> のいずれかを取ります。
</para>
</callout>
<callout arearefs="class4">
<para>
- <literal>mutable</literal> (�I�v�V�����A �f�t�H���g�� <literal>true</literal> )�F
- ���̃N���X�̃C���X�^���X���X�V�\�i�܂��͕s�\�j�ł��邱�Ƃ�w�肵�܂��B
+ <literal>mutable</literal> (オプション、 デフォルトは <literal>true</literal> ):
+ そのクラスのインスタンスが更新可能(または不可能)であることを指定します。
</para>
</callout>
<callout arearefs="class5">
<para>
- <literal>schema</literal> �i�I�v�V�����j�F
- ���[�g�� <literal><hibernate-mapping></literal> �v�f�Ŏw�肳�ꂽ�X�L�[�}����I�[�o�[���C�h���܂��B
+ <literal>schema</literal> (オプション):
+ ルートの <literal><hibernate-mapping></literal> 要素で指定されたスキーマ名をオーバーライドします。
</para>
</callout>
<callout arearefs="class6">
<para>
- <literal>catalog</literal> �i�I�v�V�����j�F���[�g�� <literal><hibernate-mapping></literal>
- �v�f�Ŏw�肳�ꂽ�J�^���O����I�[�o�[���C�h���܂��B
+ <literal>catalog</literal> (オプション):ルートの <literal><hibernate-mapping></literal>
+ 要素で指定されたカタログ名をオーバーライドします。
</para>
</callout>
<callout arearefs="class7">
<para>
- <literal>proxy</literal> �i�I�v�V�����j�F�x���������v���L�V�Ɏg���C���^�[�t�F�C�X��w�肵�܂��B
- �i��������N���X�����̂�̂�w�肷�邱�Ƃ�\�ł��B
+ <literal>proxy</literal> (オプション):遅延初期化プロキシに使うインターフェイスを指定します。
+ 永続化するクラス名そのものを指定することも可能です。
</para>
</callout>
<callout arearefs="class8">
<para>
- <literal>dynamic-update</literal> �i�I�v�V�����A �f�t�H���g�� <literal>false</literal> �j�F
- �l���ύX���ꂽ�J����������܂�SQL�� <literal>UPDATE</literal> ����A���s���ɐ������邱�Ƃ�w�肵�܂��B
+ <literal>dynamic-update</literal> (オプション、 デフォルトは <literal>false</literal> ):
+ 値が変更されたカラムだけを含むSQLの <literal>UPDATE</literal> 文を、実行時に生成することを指定します。
</para>
</callout>
<callout arearefs="class9">
<para>
- <literal>dynamic-insert</literal> �i�I�v�V����, �f�t�H���g�� <literal>false</literal> �j�F
- �l��null�ł͂Ȃ��J����������܂�SQL�� <literal>INSERT</literal> ����A���s���ɐ������邱�Ƃ�w�肵�܂��B
+ <literal>dynamic-insert</literal> (オプション, デフォルトは <literal>false</literal> ):
+ 値がnullではないカラムだけを含むSQLの <literal>INSERT</literal> 文を、実行時に生成することを指定します。
</para>
</callout>
<callout arearefs="class10">
<para>
- <literal>select-before-update</literal> (�I�v�V����, �f�t�H���g�� <literal>false</literal>):
- �I�u�W�F�N�g���ύX���ꂽ�̂��m���łȂ��Ȃ�AHibernate��SQL�� <literal>UPDATE</literal> ��
- <emphasis>�����Ď��s���Ȃ�</emphasis> ���Ƃ�w�肵�܂��B
- �������̏ꍇ(���ۓI�ɂ́A�ꎞ�I�u�W�F�N�g�� <literal>update()</literal> ��g���A
- �V�����Z�b�V�����Ɗ֘A�t����ꂽ������)�A<literal>UPDATE</literal> �����ۂɕK�v���ǂ������肷�邽�߂ɁA
- Hibernate���]����SQL�� <literal>SELECT</literal> ������s���邱�Ƃ�Ӗ����܂��B
+ <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> 文を実行することを意味します。
</para>
</callout>
<callout arearefs="class11">
<para>
- (optional, �f�t�H���g�ł� <literal>implicit</literal> ): implicit�i�Öفj��explicit�i�����j�́A
- �ǂ���̃N�G���|�����[�t�B�Y����g�������肵�܂��B
+ (optional, デフォルトでは <literal>implicit</literal> ): implicit(暗黙)かexplicit(明示)の、
+ どちらのクエリポリモーフィズムを使うか決定します。
</para>
</callout>
<callout arearefs="class12">
<para>
- <literal>where</literal> �i�I�v�V�����j�F
- ���̃N���X�̃I�u�W�F�N�g��������Ƃ��Ɏg�p����A�C�ӂ�SQL�� <literal>WHERE</literal> ����w�肵�܂��B
+ <literal>where</literal> (オプション):
+ このクラスのオブジェクトを検索するときに使用する、任意のSQLの <literal>WHERE</literal> 条件を指定します。
</para>
</callout>
<callout arearefs="class13">
<para>
- <literal>persister</literal> �i�I�v�V�����j�F�J�X�^�� <literal>ClassPersister</literal> ��w�肵�܂��B
+ <literal>persister</literal> (オプション):カスタム <literal>ClassPersister</literal> を指定します。
</para>
</callout>
<callout arearefs="class14">
<para>
- <literal>batch-size</literal> �i�I�v�V����, �f�t�H���g�� <literal>1</literal> �j�F
- ���ʎq�ł��̃N���X�̃C���X�^���X������Ƃ��́u�o�b�`�T�C�Y�v��w�肵�܂��B
+ <literal>batch-size</literal> (オプション, デフォルトは <literal>1</literal> ):
+ 識別子でこのクラスのインスタンスを復元するときの「バッチサイズ」を指定します。
</para>
</callout>
<callout arearefs="class15">
<para>
- <literal>optimistic-lock</literal> �i�I�v�V����,�f�t�H���g�� <literal>version</literal> �j�F
- �y�σ��b�N�헪���肵�܂��B
+ <literal>optimistic-lock</literal> (オプション,デフォルトは <literal>version</literal> ):
+ 楽観ロック戦略を決定します。
</para>
</callout>
<callout arearefs="class16">
<para>
- <literal>lazy</literal> �i�I�v�V�����j�F <literal>lazy="false"</literal> �Ɛݒ肷�邱�ƂŁA
- �x���t�F�b�`���ł��Ȃ��Ȃ�܂��B
+ <literal>lazy</literal> (オプション): <literal>lazy="false"</literal> と設定することで、
+ 遅延フェッチができなくなります。
</para>
</callout>
<callout arearefs="class17">
<para>
- <literal>entity-name</literal> �i�I�v�V�����A�f�t�H���g�̓N���X���j�F
- Hibernate3�ł̓N���X��������}�b�s���O�ł��i�ꍇ�ɂ���Ă͈Ⴄ�e�[�u���ɑ��Ă�j�A
- Java���x����Map��XML�ŕ\�������G���e�B�e�B�}�b�s���O���\�ł��B
- �����̏ꍇ�A�G���e�B�e�B�ɑ��ĔC�ӂ̖��O��A�����I�ɕt���Ȃ��Ă͂Ȃ�܂���B
- �ڂ����� <xref linkend="persistent-classes-dynamicmodels"/> �� <xref linkend="xml"/> ��Q�Ƃ��Ă��������B
+ <literal>entity-name</literal> (オプション、デフォルトはクラス名):
+ Hibernate3ではクラスが複数回マッピングでき(場合によっては違うテーブルに対しても)、
+ JavaレベルでMapやXMLで表現されるエンティティマッピングが可能です。
+ これらの場合、エンティティに対して任意の名前を、明示的に付けなくてはなりません。
+ 詳しくは <xref linkend="persistent-classes-dynamicmodels"/> と <xref linkend="xml"/> を参照してください。
</para>
</callout>
<callout arearefs="class18">
<para>
- <literal>check</literal> �i�I�v�V�����j�F�����I�ɃX�L�[�}�����邽�߂ɁA
- �����s�� <emphasis>check</emphasis> ���������SQL���B
+ <literal>check</literal> (オプション):自動的にスキーマを生成するために、
+ 複数行の <emphasis>check</emphasis> 制約を生成するSQL式。
</para>
</callout>
<callout arearefs="class19">
<para>
- <literal>rowid</literal> �i�I�v�V�����j�FHibernate�́A�����T�|�[�g���Ă���f�[�^�x�[�X��ROWID��
- �Ă���̂�g�����Ƃ��ł��܂��B
- �Ⴆ��Oracle��g���Ă���Ƃ��A���̃I�v�V������ <literal>rowid</literal> ��ݒ肷��A
- Hiberante��update���������邽�߂� <literal>rowid</literal> �Ƃ������ʂȃJ������g�����Ƃ��ł��܂��B
- ROWID�͏ڍׂȎ����ł���A�ۑ����ꂽ�^�v���̕����I�Ȉʒu��\���Ă��܂��B
+ <literal>rowid</literal> (オプション):Hibernateは、それをサポートしているデータベースでROWIDと
+ 呼ばれるものを使うことができます。
+ 例えばOracleを使っているとき、このオプションに <literal>rowid</literal> を設定すれば、
+ Hiberanteはupdateを高速化するために <literal>rowid</literal> という特別なカラムを使うことができます。
+ ROWIDは詳細な実装であり、保存されたタプルの物理的な位置を表しています。
</para>
</callout>
<callout arearefs="class20">
<para>
- <literal>subselect</literal> �i�I�v�V�����j�F�s�ς��ǂݎ���p�ł���G���e�B�e�B��
- �f�[�^�x�[�X�̕��⍇���isubselect�j�Ƀ}�b�s���O���܂��B
- ������̃e�[�u���̑���Ƀr���[����������ΗL�p�ł����A
- �����łȂ��̂Ȃ�L�p�ł͂���܂���B���ڂ������͉��L��Q�Ƃ��Ă��������B
+ <literal>subselect</literal> (オプション):不変かつ読み取り専用であるエンティティを
+ データベースの副問合せ(subselect)にマッピングします。
+ もし元のテーブルの代わりにビューを持ちたければ有用ですが、
+ そうでないのなら有用ではありません。より詳しい情報は下記を参照してください。
</para>
</callout>
<callout arearefs="class21">
<para>
- <literal>abstract</literal> �i�I�v�V�����j�F
- <literal><union-subclass></literal> �K�w��̒��ۃX�[�p�[�N���X�Ƀ}�[�N���邽�߂Ɏg���܂��B
+ <literal>abstract</literal> (オプション):
+ <literal><union-subclass></literal> 階層内の抽象スーパークラスにマークするために使います。
</para>
</callout>
@@ -469,102 +470,102 @@
</programlistingco>
<para>
- �i���N���X�̖��O�ɃC���^�[�t�F�C�X��w�肵�Ă�܂�������肠��܂���B
- ���̂Ƃ��� <literal><subclass></literal> �v�f��g���āA
- ���̃C���^�[�t�F�C�X���������N���X���`���Ă��������B
- <emphasis>static</emphasis> �ȓ���N���X�ł�i�����ł��܂��B
- ���̂Ƃ��͕W���`���A�Ⴆ�� <literal>eg.Foo$Bar</literal> ��g���ăN���X����w�肵�Ă��������B
+ 永続クラスの名前にインターフェイスを指定してもまったく問題ありません。
+ そのときは <literal><subclass></literal> 要素を使って、
+ そのインターフェイスを実装するクラスを定義してください。
+ <emphasis>static</emphasis> な内部クラスでも永続化できます。
+ そのときは標準形式、例えば <literal>eg.Foo$Bar</literal> を使ってクラス名を指定してください。
</para>
<para>
- <literal>mutable="false"</literal> �w������s�σN���X�́A
- �A�v���P�[�V�����ɂ��X�V��폜���o���Ȃ����Ƃ�����܂��B
- ����ɂ��AHibernate���p�t�H�[�}���X�������P���܂��B
+ <literal>mutable="false"</literal> 指定をした不変クラスは、
+ アプリケーションによる更新や削除が出来ないことがあります。
+ これにより、Hibernateがパフォーマンスを少し改善します。
</para>
<para>
- �I�v�V������ <literal>proxy</literal> �����ɂ��A�N���X�̉i���C���X�^���X�̒x�����������\�ɂȂ�܂��B
- Hibernate�͍ŏ��ɁA�w�肵���C���^�[�t�F�C�X���������CGLIB�v���L�V��Ԃ��܂��B
- ���ۂ̉i���I�u�W�F�N�g�̓v���L�V�̃��\�b�h��Ăяo���Ƃ��Ƀ��[�h���܂��B
- �ȉ��́u�x���������̂��߂̃v���L�V�v��Q�Ƃ��Ă��������B
+ オプションの <literal>proxy</literal> 属性により、クラスの永続インスタンスの遅延初期化が可能になります。
+ Hibernateは最初に、指定したインターフェイスを実装したCGLIBプロキシを返します。
+ 実際の永続オブジェクトはプロキシのメソッドを呼び出すときにロードします。
+ 以下の「遅延初期化のためのプロキシ」を参照してください。
</para>
<para>
- <emphasis>�ÖٓI</emphasis> �|�����[�t�B�Y���Ƃ́A���̓��Ӗ����Ă��܂��B
- ��̓N���X�̃C���X�^���X���A�X�[�p�[�N���X����������C���^�[�t�F�C�X�A�܂����̃N���X��w�肷��N�G���ɂ���ĕԂ���邱�ƂŁA
- �����͂��̃N���X�̃T�u�N���X�̃C���X�^���X���A���̃N���X���g��w�肵���N�G���ɂ���ĕԂ���邱�Ƃł��B
- �܂��A<emphasis>�����I</emphasis> �|�����[�t�B�Y���Ƃ́A���̓��Ӗ����Ă��܂��B
- ��̓N���X�̃C���X�^���X���A���̃N���X���I�Ɏw�肵���N�G���ɂ���Ă̂ݕԂ���邱�ƂŁA
- �����̓N���X��w�肵���N�G�����A<literal><class></literal> �v�f�̒��� <literal><subclass></literal> ��
- <literal><joined-subclass></literal> �ƃ}�b�s���O����Ă���T�u�N���X�̃C���X�^���X������Ԃ����Ƃł��B
- �قƂ�ǂ̗p�r�ł̓f�t�H���g�� <literal>polymorphism="implicit"</literal> ���K�ł��B
- �����I�ȃ|�����[�t�B�Y���́A2�̈�����N���X�������e�[�u���Ƀ}�b�s���O����Ă���Ƃ��ɗL�p�ł�
- �i����ɂ���ăe�[�u���J�����̃T�u�Z�b�g��܂ށA�u�y�ʂȁv�N���X���\�ɂȂ�܂��j�B
+ <emphasis>暗黙的</emphasis> ポリモーフィズムとは、次の二つを意味しています。
+ 一つはクラスのインスタンスが、スーパークラスや実装したインターフェイス、またそのクラスを指定するクエリによって返されることで、
+ もう一つはそのクラスのサブクラスのインスタンスが、そのクラス自身を指定したクエリによって返されることです。
+ また、<emphasis>明示的</emphasis> ポリモーフィズムとは、次の二つを意味しています。
+ 一つはクラスのインスタンスが、そのクラスを明示的に指定したクエリによってのみ返されることで、
+ もう一つはクラスを指定したクエリが、<literal><class></literal> 要素の中で <literal><subclass></literal> や
+ <literal><joined-subclass></literal> とマッピングされているサブクラスのインスタンスだけを返すことです。
+ ほとんどの用途ではデフォルトの <literal>polymorphism="implicit"</literal> が適切です。
+ 明示的なポリモーフィズムは、2つの違ったクラスが同じテーブルにマッピングされているときに有用です
+ (これによってテーブルカラムのサブセットを含む、「軽量な」クラスが可能になります)。
</para>
<para>
- <literal>persister</literal> ������w�肷�邱�ƂŁA�N���X�̉i�����헪��J�X�^�}�C�Y�ł��܂��B
- �Ⴆ�� <literal>org.hibernate.persister.EntityPersister</literal> ���g�̃T�u�N���X��w�肵����A
- �܂��Ⴆ�X�g�A�h�v���V�[�W���R�[���A�t���b�g�t�@�C���փV���A���C�Y�A
- LDAP�Ȃǂ�ʂ����i������������� <literal>org.hibernate.persister.ClassPersister</literal>
- �C���^�[�t�F�C�X�̊��S�ɐV����������ł��܂��B�ȒP�ȗ�Ƃ��� <literal>org.hibernate.test.CustomPersister</literal>
- ���Ă��������i����� <literal>Hashtable</literal> �́u�i�����v�ł��j�B
+ <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> の「永続化」です)。
</para>
<para>
- <literal>dynamic-update</literal> �� <literal>dynamic-insert</literal> �̐ݒ�̓T�u�N���X�Ɍp������܂���B
- ���̂��� <literal><subclass></literal> �� <literal><joined-subclass></literal> �v�f��w�肷�邱�Ƃ�o���܂��B
- �����̐ݒ�̓p�t�H�[�}���X����コ���鎖�����܂����A���Ƃ����Ƃ����܂��̂ŁA�T�d�Ɏg�p���Ă��������B
+ <literal>dynamic-update</literal> と <literal>dynamic-insert</literal> の設定はサブクラスに継承されません。
+ そのため <literal><subclass></literal> や <literal><joined-subclass></literal> 要素を指定することも出来ます。
+ これらの設定はパフォーマンスを向上させる事もありますが、落とすこともありますので、慎重に使用してください。
</para>
<para>
- <literal>select-before-update</literal> �̎g�p�͒ʏ�p�t�H�[�}���X�𗎂Ƃ��܂��B
- ��� <literal>Session</literal> �֕����C���X�^���X�̃O���t��Ēlj�����Ȃ�A
- �f�[�^�x�[�X�X�V�̃g���K��s�K�v�ɌĂяo���̂����Ƃ����_�ŁA���ɗL�p�ł��B
+ <literal>select-before-update</literal> の使用は通常パフォーマンスを落とします。
+ もし <literal>Session</literal> へ分離インスタンスのグラフを再追加するなら、
+ データベース更新のトリガを不必要に呼び出すのを避けるという点で、非常に有用です。
</para>
<para>
- <literal>dynamic-update</literal> ��L���ɂ���A�y�σ��b�N�헪��I�Ԃ��ƂɂȂ�܂��B
+ <literal>dynamic-update</literal> を有効にすれば、楽観ロック戦略を選ぶことになります。
</para>
<itemizedlist>
<listitem>
<para>
- <literal>version</literal> �o�[�W����/�^�C���X�^���v�J������`�F�b�N���܂�
+ <literal>version</literal> バージョン/タイムスタンプカラムをチェックします
</para>
</listitem>
<listitem>
<para>
- <literal>all</literal> ���ׂẴJ������`�F�b�N���܂��B
+ <literal>all</literal> すべてのカラムをチェックします。
</para>
</listitem>
<listitem>
<para>
- <literal>dirty</literal> �ύX�����J������`�F�b�N���A�����X�V�ł���悤�ɂ��܂��B
+ <literal>dirty</literal> 変更したカラムをチェックし、同時更新できるようにします。
</para>
</listitem>
<listitem>
<para>
- <literal>none</literal> �y�σ��b�N��g�p���܂���
+ <literal>none</literal> 楽観ロックを使用しません
</para>
</listitem>
</itemizedlist>
<para>
- Hibernate�Ŋy�ϓI���b�N�헪��g���Ȃ�A�o�[�W����/�^�C���X�^���v�J������g�����Ƃ�
- <emphasis> ����</emphasis> ���������߂��܂��B
- �y�ϓI���b�N�̓p�t�H�[�}���X�̊ϓ_�����œK�ł���A����ɕ����C���X�^���X�ւ̏C��
- �i�܂� <literal>Session.marge()</literal> ���g����Ƃ��j
- �𐳊m�Ɉ������Ƃ̂ł���B��̐헪�ł����܂��B
+ Hibernateで楽観的ロック戦略を使うなら、バージョン/タイムスタンプカラムを使うことを
+ <emphasis> 非常に</emphasis> 強くお勧めします。
+ 楽観的ロックはパフォーマンスの観点からも最適であり、さらに分離インスタンスへの修正
+ (つまり <literal>Session.marge()</literal> が使われるとき)
+ を正確に扱うことのできる唯一の戦略でもあります。
</para>
<para>
- Hibernate�̃}�b�s���O�ɂƂ��ăr���[�ƕ��ʂ̃e�[�u���̊ԂɈႢ�͂Ȃ��A
- �f�[�^�x�[�X���x���ł͓��ߓI�ł�
- �i�������r���[���S�ɂ̓T�|�[�g���Ă��Ȃ�DBMS�����܂��B
- ���ɁA�X�V�̂���r���[�ɑ��Ă͂����ł��j�B
- �r���[��g�������Ă�A�f�[�^�x�[�X�ō쐬�ł��Ȃ����Ƃ�����܂�
- �i�Ⴆ�A���K�V�[�X�L�[�}�̏ꍇ�j�B
- ���̏ꍇ�ɂ́A�s�ς��ǂݎ���p�̃G���e�B�e�B�ɗ^����ꂽSQL�̕��⍇������}�b�v�ł��܂��B
+ Hibernateのマッピングにとってビューと普通のテーブルの間に違いはなく、
+ データベースレベルでは透過的です
+ (ただしビューを完全にはサポートしていないDBMSもあります。
+ 特に、更新のあるビューに対してはそうです)。
+ ビューを使いたくても、データベースで作成できないことがあります
+ (例えば、レガシースキーマの場合)。
+ この場合には、不変かつ読み取り専用のエンティティに与えられたSQLの副問合せ文をマップできます。
</para>
<programlisting><![CDATA[<class name="Summary">
@@ -581,10 +582,10 @@
</class>]]></programlisting>
<para>
- �e�[�u�����̃G���e�B�e�B�Ɠ�������悤�ɒ�`���Ă��������B
- �I�[�g�t���b�V�����m���ɋN����悤�ɁA�܂����o�G���e�B�e�B�ɑ���N�G�����Â��f�[�^��
- �Ԃ��Ȃ��悤�ɂ��邽�߂ł��B
- <literal><subselect></literal> �͑����ƃl�X�g�����}�b�s���O�����̂ǂ���ł���p�ł��܂��B
+ テーブルをこのエンティティと同期するように定義してください。
+ オートフラッシュが確実に起こるように、また導出エンティティに対するクエリが古いデータを
+ 返さないようにするためです。
+ <literal><subselect></literal> は属性とネストしたマッピング属性のどちらでも利用できます。
</para>
</sect2>
@@ -593,9 +594,9 @@
<title>id</title>
<para>
- �}�b�v���ꂽ�N���X�̓f�[�^�x�[�X�e�[�u���̎�L�[�J�������` <emphasis>���Ȃ���Ȃ�܂���</emphasis> �B
- �قƂ�ǂ̃N���X�ɂ̓C���X�^���X�̃��j�[�N�Ȏ��ʎq��ێ�����JavaBeans�X�^�C���̃v���p�e�B�����܂��B
- <literal><id></literal> �v�f�́A���̃v���p�e�B�����L�[�J�����ւ̃}�b�s���O���`���܂��B
+ マップされたクラスはデータベーステーブルの主キーカラムを定義 <emphasis>しなければなりません</emphasis> 。
+ ほとんどのクラスにはインスタンスのユニークな識別子を保持するJavaBeansスタイルのプロパティもあります。
+ <literal><id></literal> 要素は、そのプロパティから主キーカラムへのマッピングを定義します。
</para>
<programlistingco>
@@ -619,60 +620,60 @@
<calloutlist>
<callout arearefs="id1">
<para>
- <literal>name</literal>�i�I�v�V�����j�F���ʎq�v���p�e�B�̖��O�B
+ <literal>name</literal>(オプション):識別子プロパティの名前。
</para>
</callout>
<callout arearefs="id2">
<para>
- <literal>type</literal>�i�I�v�V�����j�FHibernate�̌^�������O�B
+ <literal>type</literal>(オプション):Hibernateの型を示す名前。
</para>
</callout>
<callout arearefs="id3">
<para>
- <literal>column</literal>�i�I�v�V���� - �f�t�H���g�̓v���p�e�B���j�F
- ��L�[�J�����̖��O�B
+ <literal>column</literal>(オプション - デフォルトはプロパティ名):
+ 主キーカラムの名前。
</para>
</callout>
<callout arearefs="id4">
<para>
- <literal>unsaved-value</literal>�i�I�v�V���� - �f�t�H���g�̒l��sensible�j�F
- �C���X�^���X���V�����C���X�^���X�����ꂽ
- �i�Z�[�u����Ă��Ȃ��j���Ƃ����A���ʎq�v���p�e�B�̒l�B
- �ȑO��Session�ŃZ�[�u�܂��̓��[�h���ꂽ�ꎞ�I�C���X�^���X�Ƌ�ʂ��邽�߂�
- �g���܂��B
+ <literal>unsaved-value</literal>(オプション - デフォルトの値はsensible):
+ インスタンスが新しくインスタンス化された
+ (セーブされていない)ことを示す、識別子プロパティの値。
+ 以前のSessionでセーブまたはロードされた一時的インスタンスと区別するために
+ 使います。
</para>
</callout>
<callout arearefs="id5">
<para>
- <literal>access</literal>�i�I�v�V���� - �f�t�H���g�� <literal>property</literal> �j�F
- �v���p�e�B�̒l�փA�N�Z�X���邽�߂�Hibernate���g���헪�ł��B
+ <literal>access</literal>(オプション - デフォルトは <literal>property</literal> ):
+ プロパティの値へアクセスするためにHibernateが使う戦略です。
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- <literal>name</literal> �������Ȃ���A�N���X�ɂ͎��ʎq�v���p�e�B���Ȃ���̂Ƃ݂Ȃ���܂��B
+ <literal>name</literal> 属性がなければ、クラスには識別子プロパティがないものとみなされます。
</para>
<para>
- <literal>unsaved-value</literal> ������Hibernate3�ł͂قƂ�ǂ̏ꍇ�A�K�v�ł͂���܂���B
+ <literal>unsaved-value</literal> 属性はHibernate3ではほとんどの場合、必要ではありません。
</para>
<para>
- �����L�[�����K�V�[�f�[�^�ɃA�N�Z�X�ł���悤�ɁA
- <literal><composite-id></literal> �Ƃ�����ւ̃}�b�s���O��`������܂��B
- ���������̗p�r�ւ̎g�p�͑S���������߂ł��܂���B
+ 複合キーを持つレガシーデータにアクセスできるように、
+ <literal><composite-id></literal> という代替のマッピング定義があります。
+ しかし他の用途への使用は全くおすすめできません。
</para>
<sect3 id="mapping-declaration-id-generator" revision="2">
- <title>�W�F�l���[�^</title>
+ <title>ジェネレータ</title>
<para>
- �I�v�V������ <literal><generator></literal> �q�v�f�́A
- �i���N���X�̃C���X�^���X�̃��j�[�N�Ȏ��ʎq�����邽�߂Ɏg���AJava�N���X��w�肵�܂��B
- �W�F�l���[�^�C���X�^���X�̐ݒ�A������͏������Ƀp�����[�^���K�v�ł���A<literal><param></literal>
- �v�f��g���ēn�����Ƃ��ł��܂��B
+ オプションの <literal><generator></literal> 子要素は、
+ 永続クラスのインスタンスのユニークな識別子を生成するために使う、Javaクラスを指定します。
+ ジェネレータインスタンスの設定、もしくは初期化にパラメータが必要であれば、<literal><param></literal>
+ 要素を使って渡すことができます。
</para>
<programlisting><![CDATA[<id name="id" type="long" column="cat_id">
@@ -683,11 +684,11 @@
</id>]]></programlisting>
<para>
- ���ׂẴW�F�l���[�^�́A�C���^�[�t�F�C�X
- <literal>org.hibernate.id.IdentifierGenerator</literal> ��������܂��B
- ����͂ƂĂ�P���ȃC���^�[�t�F�C�X�Ȃ̂ŁA���ʂȎ�����Ǝ��ɗp�ӂ���A�v���P�[�V��������邩�����܂���B
- ������Hibernate�͑g�ݍ��݂̎���������p�ӂ��Ă��܂��B
- �g�ݍ��݂̃W�F�l���[�^�ɂ͈ȉ��̃V���[�g�J�b�g��������܂��F
+ すべてのジェネレータは、インターフェイス
+ <literal>org.hibernate.id.IdentifierGenerator</literal> を実装します。
+ これはとても単純なインターフェイスなので、特別な実装を独自に用意するアプリケーションもあるかもしれません。
+ しかしHibernateは組み込みの実装をいくつも用意しています。
+ 組み込みのジェネレータには以下のショートカット名があります:
<variablelist>
<varlistentry>
@@ -695,9 +696,9 @@
<listitem>
<para>
<literal>long</literal> , <literal>short</literal> ,
- <literal>int</literal> �^�̎��ʎq�����܂��B
- �����͑��̃v���Z�X�������e�[�u���Ƀf�[�^��}�����Ȃ��Ƃ��������j�[�N�ł��B
- <emphasis>�N���X�^��ł͎g��Ȃ��ł�������</emphasis> �B
+ <literal>int</literal> 型の識別子を生成します。
+ これらは他のプロセスが同じテーブルにデータを挿入しないときだけユニークです。
+ <emphasis>クラスタ内では使わないでください</emphasis> 。
</para>
</listitem>
</varlistentry>
@@ -705,10 +706,10 @@
<term><literal>identity</literal></term>
<listitem>
<para>
- DB2, MySQL, MS SQL Server, Sybase, HypersonicSQL�̎��ʎq�J������
- �T�|�[�g���܂��B
- �Ԃ���鎯�ʎq�̌^�� <literal>long</literal> , <literal>short</literal> ,
- <literal>int</literal> �̂����ꂩ�ł��B
+ DB2, MySQL, MS SQL Server, Sybase, HypersonicSQLの識別子カラムを
+ サポートします。
+ 返される識別子の型は <literal>long</literal> , <literal>short</literal> ,
+ <literal>int</literal> のいずれかです。
</para>
</listitem>
</varlistentry>
@@ -716,9 +717,9 @@
<term><literal>sequence</literal></term>
<listitem>
<para>
- DB2, PostgreSQL, Oracle, SAP DB, McKoi�̃V�[�P���X��AInterbase�̃W�F�l���[�^��g�p���܂��B
- �Ԃ���鎯�ʎq�̌^�� <literal>long</literal> , <literal>short</literal> ,
- <literal>int</literal> �̂����ꂩ�ł��B
+ DB2, PostgreSQL, Oracle, SAP DB, McKoiのシーケンスや、Interbaseのジェネレータを使用します。
+ 返される識別子の型は <literal>long</literal> , <literal>short</literal> ,
+ <literal>int</literal> のいずれかです。
</para>
</listitem>
</varlistentry>
@@ -727,11 +728,11 @@
<listitem>
<para id="mapping-declaration-id-hilodescription" revision="1">
<literal>long</literal> , <literal>short</literal> ,
- <literal>int</literal> �^�̎��ʎq������I�ɐ�������hi/lo�A���S���Y����g���܂��B
- hi�l�̃\�[�X�Ƃ��āA�e�[�u���ƃJ������^���܂�(�f�t�H���g�ł͂��ꂼ�� <literal>hibernate_unique_key</literal> ��
- <literal>next_hi</literal> )�B
+ <literal>int</literal> 型の識別子を効率的に生成するhi/loアルゴリズムを使います。
+ hi値のソースとして、テーブルとカラムを与えます(デフォルトではそれぞれ <literal>hibernate_unique_key</literal> と
+ <literal>next_hi</literal> )。
- hi/lo�A���S���Y���͓���̃f�[�^�x�[�X�ɑ��Ă̂݃��j�[�N�Ȏ��ʎq�����܂��B
+ hi/loアルゴリズムは特定のデータベースに対してのみユニークな識別子を生成します。
</para>
</listitem>
</varlistentry>
@@ -740,8 +741,8 @@
<listitem>
<para>
<literal>long</literal> , <literal>short</literal> ,
- <literal>int</literal> �^�̎��ʎq������I�ɐ�������hi/lo�A���S���Y����g���܂��B
- �w�肳�ꂽ�f�[�^�x�[�X�V�[�P���X��^���܂��B
+ <literal>int</literal> 型の識別子を効率的に生成するhi/loアルゴリズムを使います。
+ 指定されたデータベースシーケンスを与えます。
</para>
</listitem>
@@ -750,8 +751,8 @@
<term><literal>uuid</literal></term>
<listitem>
<para>
- (IP�A�h���X���g�p�����)�l�b�g���[�N��Ń��j�[�N�ȕ�����^�̎��ʎq�����邽�߂ɁA
- 128�r�b�g��UUID�A���S���Y����g�p���܂��BUUID�͒���32��16�i�����̕�����Ƃ��ăG���R�[�h����܂��B
+ (IPアドレスが使用される)ネットワーク内でユニークな文字列型の識別子を生成するために、
+ 128ビットのUUIDアルゴリズムを使用します。UUIDは長さ32の16進数字の文字列としてエンコードされます。
</para>
</listitem>
</varlistentry>
@@ -759,7 +760,7 @@
<term><literal>guid</literal></term>
<listitem>
<para>
- MS SQL�T�[�o��MySQL�Ńf�[�^�x�[�X����������GUID�������g�p���܂��B
+ MS SQLサーバとMySQLでデータベースが生成するGUID文字列を使用します。
</para>
</listitem>
</varlistentry>
@@ -767,8 +768,8 @@
<term><literal>native</literal></term>
<listitem>
<para>
- �g�p����f�[�^�x�[�X�̐��\�ɂ�� <literal>identity</literal> , <literal>sequence</literal> ,
- <literal>hilo</literal> �̂����ꂩ���I��܂��B
+ 使用するデータベースの性能により <literal>identity</literal> , <literal>sequence</literal> ,
+ <literal>hilo</literal> のいずれかが選ばれます。
</para>
</listitem>
</varlistentry>
@@ -776,9 +777,9 @@
<term><literal>assigned</literal></term>
<listitem>
<para>
- <literal>save()</literal> ���Ă��O�ɁA
- �A�v���P�[�V�������I�u�W�F�N�g�Ɏ��ʎq�����ł���悤�ɂ��܂��B
- <literal><generator></literal> ���w�肳��Ă��Ȃ���A���ꂪ�f�t�H���g�̐헪�ɂȂ�܂��B
+ <literal>save()</literal> が呼ばれる前に、
+ アプリケーションがオブジェクトに識別子を代入できるようにします。
+ <literal><generator></literal> が指定されていなければ、これがデフォルトの戦略になります。
</para>
</listitem>
</varlistentry>
@@ -786,8 +787,8 @@
<term><literal>select</literal></term>
<listitem>
<para>
- ���郆�j�[�N�L�[�ɂ��s�̑I��Ǝ�L�[�̒l�̕����ɂ��A
- �f�[�^�x�[�X�g���K�����蓖�Ă���L�[��擾���܂��B
+ あるユニークキーによる行の選択と主キーの値の復元により、
+ データベーストリガが割り当てた主キーを取得します。
</para>
</listitem>
</varlistentry>
@@ -795,8 +796,8 @@
<term><literal>foreign</literal></term>
<listitem>
<para>
- ���̊֘A�I�u�W�F�N�g�̎��ʎq��g���܂��B
- ���ʂ́A<literal><one-to-one></literal> ��L�[�֘A�Ƒg�ݍ��킹�Ďg���܂��B
+ 他の関連オブジェクトの識別子を使います。
+ 普通は、<literal><one-to-one></literal> 主キー関連と組み合わせて使います。
</para>
</listitem>
</varlistentry>
@@ -806,14 +807,14 @@
</sect3>
<sect3 id="mapping-declaration-id-hilo" revision="1">
- <title>Hi/lo �A���S���Y��</title>
+ <title>Hi/lo アルゴリズム</title>
<para>
- <literal>hilo</literal> �� <literal>seqhilo</literal> �W�F�l���[�^�́A
- ���ʎq�����̑�\�I�ȃA�v���[�`�ł���hi/lo�A���S���Y����2�̑�֎�������܂��B
+ <literal>hilo</literal> と <literal>seqhilo</literal> ジェネレータは、
+ 識別子生成の代表的なアプローチであるhi/loアルゴリズムの2つの代替実装を提供します。
- 1�Ԗڂ̎����́A����ɗ��p�����"hi"�l��ێ�����u���ʂȁv�f�[�^�x�[�X�e�[�u����
- �K�v�Ƃ��܂��B
- 2�Ԗڂ̎����́AOracle�X�^�C���̃V�[�P���X��g���܂��i�T�|�[�g����Ă���ꍇ�j�B
+ 1番目の実装は、次回に利用される"hi"値を保持する「特別な」データベーステーブルを
+ 必要とします。
+ 2番目の実装は、Oracleスタイルのシーケンスを使います(サポートされている場合)。
</para>
<programlisting><![CDATA[<id name="id" type="long" column="cat_id">
@@ -832,31 +833,31 @@
</id>]]></programlisting>
<para>
- �c�O�Ȃ���Hibernate�ւ̓Ǝ��� <literal>Connection</literal> �����Ƃ��ɂ́A<literal>hilo</literal> ��g���܂���B
- Hibernate��JTA�Ń��X�g����Ă���ڑ���擾���邽�߂ɃA�v���P�[�V�����T�[�o�[�̃f�[�^�\�[�X��g�p���Ă���Ƃ��ɂ́A
- <literal>hibernate.transaction.manager_lookup_class</literal> ��K�ɐݒ肵�Ȃ���Ȃ�܂���B
+ 残念ながらHibernateへの独自の <literal>Connection</literal> を提供するときには、<literal>hilo</literal> を使えません。
+ HibernateがJTAでリストされている接続を取得するためにアプリケーションサーバーのデータソースを使用しているときには、
+ <literal>hibernate.transaction.manager_lookup_class</literal> を適切に設定しなければなりません。
</para>
</sect3>
<sect3 id="mapping-declaration-id-uuid">
- <title>UUID �A���S���Y��</title>
+ <title>UUID アルゴリズム</title>
<para>
- UUID�ɂ͈ȉ��̂�̂��܂܂�܂��F
- IP�A�h���X�AJVM�̃X�^�[�g�A�b�v�^�C���i4����1�b�̐��m���j�A
- �V�X�e�����ԁA�iJVM�ɑ��ă��j�[�N�ȁj�J�E���^�l�B
- Java�R�[�h����MAC�A�h���X������A�h���X��擾���邱�Ƃ͂ł��Ȃ��̂ŁA
- JNI���g���Ȃ��Ƃ��̍ŗǂ̕��@�ł��B
+ UUIDには以下のものが含まれます:
+ IPアドレス、JVMのスタートアップタイム(4分の1秒の正確さ)、
+ システム時間、(JVMに対してユニークな)カウンタ値。
+ JavaコードからMACアドレスやメモリアドレスを取得することはできないので、
+ JNIが使えないときの最良の方法です。
</para>
</sect3>
<sect3 id="mapping-declaration-id-sequences">
- <title>���ʎq�J�����ƃV�[�P���X</title>
+ <title>識別子カラムとシーケンス</title>
<para>
- ���ʎq�J������T�|�[�g���Ă���f�[�^�x�[�X�iDB2, MySQL, Sybase, MS SQL�j�ł́A
- <literal>identity</literal> �L�[������g���܂��B
- �V�[�P���X��T�|�[�g����f�[�^�x�[�X�iDB2, Oracle, PostgreSQL, Interbase, McKoi, SAP DB�j�ł́A
- <literal>sequence</literal> �X�^�C���̃L�[������g���܂��B
- �ǂ���̐헪��A�V�����I�u�W�F�N�g��}�����邽�߂ɁASQL�N�G����2�K�v�Ƃ��܂��B
+ 識別子カラムをサポートしているデータベース(DB2, MySQL, Sybase, MS SQL)では、
+ <literal>identity</literal> キー生成を使えます。
+ シーケンスをサポートするデータベース(DB2, Oracle, PostgreSQL, Interbase, McKoi, SAP DB)では、
+ <literal>sequence</literal> スタイルのキー生成を使えます。
+ どちらの戦略も、新しいオブジェクトを挿入するために、SQLクエリを2つ必要とします。
</para>
<programlisting><![CDATA[<id name="id" type="long" column="person_id">
@@ -870,36 +871,36 @@
</id>]]></programlisting>
<para>
- �N���X�v���b�g�t�H�[���̊J���ł́A<literal>native</literal> �헪��
+ クロスプラットフォームの開発では、<literal>native</literal> 戦略は
<literal>identity</literal> , <literal>sequence</literal> ,
- <literal>hilo</literal> �헪�̒�����1��I���܂����A
- ����͎g�p���Ă���f�[�^�x�[�X�̔\�͂Ɉˑ����܂��B
+ <literal>hilo</literal> 戦略の中から1つを選択しますが、
+ これは使用しているデータベースの能力に依存します。
</para>
</sect3>
<sect3 id="mapping-declaration-id-assigned">
- <title>���ʎq�̊��蓖��</title>
+ <title>識別子の割り当て</title>
<para>
- �A�v���P�[�V�����Ɏ��ʎq���蓖�Ă��������̂ł����(Hibernate�����������̂ł͂Ȃ��j�A
- <literal>assigned</literal> �W�F�l���[�^��g�����Ƃ��ł��܂��B
- ���̓��ʂȃW�F�l���[�^�́A���łɃI�u�W�F�N�g�̎��ʎq�v���p�e�B�ɑ�����ꂽ�l��
- ���ʎq�Ɏg���܂��B���̃W�F�l���[�^�͎�L�[���㗝�L�[�̑���Ɏ��R�L�[�ł���ꍇ�Ɏg�p���܂��B
- <literal><generator></literal> �v�f��w�肵�Ȃ��ꍇ�̃f�t�H���g�̓���ɂȂ�܂��B
+ アプリケーションに識別子を割り当てさせたいのであれば(Hibernateが生成するものではなく)、
+ <literal>assigned</literal> ジェネレータを使うことができます。
+ この特別なジェネレータは、すでにオブジェクトの識別子プロパティに代入された値を
+ 識別子に使います。このジェネレータは主キーが代理キーの代わりに自然キーである場合に使用します。
+ <literal><generator></literal> 要素を指定しない場合のデフォルトの動作になります。
</para>
<para>
- <literal>assigned</literal> �W�F�l���[�^��I����ƁA
- Hibernate�� <literal>unsaved-value="undefined"</literal> ��g�p���܂��B
- �����āA�o�[�W������^�C���X�^���v�̃v���p�e�B���Ȃ��ꍇ�� <literal>Interceptor.isUnsaved()</literal>
- ���`���Ȃ������ꍇ�ɂ́A�C���X�^���X���ꎞ�I(transient)�Ȃ�̂ł���̂��A
- �܂��̓Z�b�V�������番��(detached)������̂��ǂ������߂邽�߂ɁA�f�[�^�x�[�X�ׂ܂��B
+ <literal>assigned</literal> ジェネレータを選択すると、
+ Hibernateは <literal>unsaved-value="undefined"</literal> を使用します。
+ そして、バージョンやタイムスタンプのプロパティがない場合や <literal>Interceptor.isUnsaved()</literal>
+ を定義しなかった場合には、インスタンスが一時的(transient)なものであるのか、
+ またはセッションから分離(detached)したものかどうかを決めるために、データベースを調べます。
</para>
</sect3>
<sect3 id="mapping-declaration-id-select">
- <title>�g���K�ɂ�芄�蓖�Ă�ꂽ��L�[</title>
+ <title>トリガにより割り当てられた主キー</title>
<para>
- ���K�V�[�X�L�[�}�̂��߂ɂ̂ݎw�肵�܂�(Hibernate�̓g���K��g����DDL�����܂���)�B
+ レガシースキーマのためにのみ指定します(Hibernateはトリガを使ってDDLを生成しません)。
</para>
<programlisting><![CDATA[<id name="id" type="long" column="person_id">
@@ -909,9 +910,9 @@
</id>]]></programlisting>
<para>
- ��̗�̒��ŁA�N���X�Ŏ��R�L�[�Ƃ��Ē�`���ꂽ
- <literal>socialSecurityNumber</literal> �Ƃ������O�̃��j�[�N�Ȓl�̃v���p�e�B�ƁA
- �l���g���K�ɂ�萶������� <literal>person_id</literal> �Ƃ������O�̑㗝�L�[������܂��B
+ 上の例の中で、クラスで自然キーとして定義された
+ <literal>socialSecurityNumber</literal> という名前のユニークな値のプロパティと、
+ 値がトリガにより生成される <literal>person_id</literal> という名前の代理キーがあります。
</para>
</sect3>
@@ -934,11 +935,11 @@
</composite-id>]]></programlisting>
<para>
- �����L�[�̂���e�[�u���ɑ��A
- ���ʎq�v���p�e�B�Ƃ��ăN���X�̕����̃v���p�e�B��}�b�s���O���邱�Ƃ��ł��܂��B
- <literal><composite-id></literal> �v�f�́A�q�v�f�Ƃ���
- <literal><key-property></literal> �v���p�e�B�}�b�s���O��
- <literal><key-many-to-one></literal> �}�b�s���O�����܂��B
+ 複合キーのあるテーブルに対し、
+ 識別子プロパティとしてクラスの複数のプロパティをマッピングすることができます。
+ <literal><composite-id></literal> 要素は、子要素として
+ <literal><key-property></literal> プロパティマッピングと
+ <literal><key-many-to-one></literal> マッピングを受け入れます。
</para>
<programlisting><![CDATA[<composite-id>
@@ -947,27 +948,27 @@
</composite-id>]]></programlisting>
<para>
- �������ʎq�̓�������������邽�߂ɂ́A�i���N���X�� <literal>equals()</literal> ��
- <literal>hashCode()</literal> ��I�[�o�[���C�h <emphasis>���Ȃ���Ȃ�܂���</emphasis> �B
- �܂� <literal>Serializable</literal> ��������Ȃ�������܂���B
+ 複合識別子の等価性を実装するためには、永続クラスが <literal>equals()</literal> と
+ <literal>hashCode()</literal> をオーバーライド <emphasis>しなければなりません</emphasis> 。
+ また <literal>Serializable</literal> も実装しなければいけません。
</para>
<para>
- �c�O�Ȃ��畡�����ʎq�̂��߂̂��̕��@�́A
- �i���I�u�W�F�N�g�����g�̎��ʎq�ł��邱�Ƃ�Ӗ����Ă��܂��B
- �I�u�W�F�N�g���g���ʎq�Ƃ���ȏ�֗̕��ȁu�������v�͂���܂���B
- �����L�[�Ɋ֘A�����i����Ԃ� <literal>load()</literal> �o����悤�ɂȂ�O�ɁA
- �i���N���X���g��C���X�^���X�����A���ʎq�v���p�e�B��ݒ肵�Ȃ���Ȃ�܂���B
- <emphasis> �g�ݍ��݂�</emphasis> �������ʎq�ƌĂ�邱�̃A�v���[�`�́A
- �{�i�I�ȃA�v���P�[�V�����ɂ͌����Ă��܂���B
+ 残念ながら複合識別子のためのこの方法は、
+ 永続オブジェクトが自身の識別子であることを意味しています。
+ オブジェクト自身を識別子とする以上の便利な「扱い方」はありません。
+ 複合キーに関連した永続状態を <literal>load()</literal> 出来るようになる前に、
+ 永続クラス自身をインスタンス化し、識別子プロパティを設定しなければなりません。
+ <emphasis> 組み込みの</emphasis> 複合識別子と呼ばれるこのアプローチは、
+ 本格的なアプリケーションには向いていません。
</para>
<para>
- 2�ڂ̕��@�� <emphasis> �}�b�v���ꂽ</emphasis> �������ʎq�ƌĂ���̂ŁA
- <literal><composite-id></literal>�G�������g��Ŏw�肵�����ʃv���p�e�B��
- �i���N���X�ƕ����������ʎq�N���X�̗����ɏd�����đ��݂��܂��B
+ 2つ目の方法は <emphasis> マップされた</emphasis> 複合識別子と呼ばれるもので、
+ <literal><composite-id></literal>エレメント内で指定した識別プロパティが
+ 永続クラスと分離した識別子クラスの両方に重複して存在します。
</para>
<programlisting><![CDATA[<composite-id class="MedicareId" mapped="true">
@@ -976,65 +977,65 @@
</composite-id>]]></programlisting>
<para>
- ���̗�ł́A�������ʎq�N���X�i <literal>MedicareId</literal> �j�ƃG���e�B�e�B�N���X���g�̗������A
- <literal>medicareNumber</literal> �� <literal>dependent</literal> �Ƃ������O�̃v���p�e�B�����܂��B
- ���ʎq�N���X�́A<literal>equals()</literal> �� <literal>hashCode()</literal> ��I�[�o���C�h���A
- <literal>Serializable</literal> ��������Ȃ��Ă͂Ȃ�܂���B
- ���̕��@�ɂ́A���炩�ɃR�[�h���d������Ƃ����s�s��������܂��B
+ この例では、複合識別子クラス( <literal>MedicareId</literal> )とエンティティクラス自身の両方が、
+ <literal>medicareNumber</literal> と <literal>dependent</literal> という名前のプロパティを持ちます。
+ 識別子クラスは、<literal>equals()</literal> と <literal>hashCode()</literal> をオーバライドし、
+ <literal>Serializable</literal> を実装しなくてはなりません。
+ この方法には、明らかにコードが重複するという不都合があります。
</para>
<para>
- ���̑����̓}�b�s���O�����������ʎq��w�肷�邽�߂Ɏg�p���܂��B
+ 次の属性はマッピングした複合識別子を指定するために使用します。
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- <literal>mapped</literal> (�I�v�V�����A�f�t�H���g�� <literal>false</literal> ):
- �}�b�s���O�����������ʎq���g�p����邱�ƂƁA��܂��ꂽ�v���p�e�B�̃}�b�s���O���A
- �G���e�B�e�B�N���X�ƕ������ʎq�N���X�̗�����Q�Ƃ��邱�Ƃ����܂��B
+ <literal>mapped</literal> (オプション、デフォルトは <literal>false</literal> ):
+ マッピングした複合識別子が使用されることと、包含されたプロパティのマッピングが、
+ エンティティクラスと複合識別子クラスの両方を参照することを示します。
</para>
</listitem>
<listitem>
<para>
- <literal>class</literal> (�I�v�V����,�������}�b�s���O�����������ʎq�ɂ͕K�{):
- �������ʎq�Ƃ��Ďg�p����N���X�B
+ <literal>class</literal> (オプション,ただしマッピングした複合識別子には必須):
+ 複合識別子として使用するクラス。
</para>
</listitem>
</itemizedlist>
<para>
- 3�ڂ̂���ɕ֗��ȕ��@�́A�������ʎq��<xref linkend="components-compositeid"/>���
- �R���|�[�l���g�N���X�Ƃ��Ď������邱�Ƃł��B
- ���ŋL�q���Ă��鑮���́A���̑�֕��@�ɂ̂ݓK�p����܂��B
+ 3つ目のさらに便利な方法は、複合識別子を<xref linkend="components-compositeid"/>内の
+ コンポーネントクラスとして実装することです。
+ 下で記述している属性は、この代替方法にのみ適用されます。
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- <literal>name</literal> (�I�v�V����, ���̃A�v���[�`�ł͕K�{):
- �������ʎq��ێ�����R���|�[�l���g�^�C�v�̃v���p�e�B(9�͂�Q�Ƃ��Ă�������).
+ <literal>name</literal> (オプション, このアプローチでは必須):
+ 複合識別子を保持するコンポーネントタイプのプロパティ(9章を参照してください).
</para>
</listitem>
<listitem>
<para>
- <literal>access</literal> (�I�v�V���� - �f�t�H���g�� <literal>property</literal> ):
- Hibernate���v���p�e�B�̒l�ɃA�N�Z�X���邽�߂Ɏg�p���ׂ��헪�B
+ <literal>access</literal> (オプション - デフォルトは <literal>property</literal> ):
+ Hibernateがプロパティの値にアクセスするために使用すべき戦略。
</para>
</listitem>
<listitem>
<para>
<literal>class</literal>
- �i�I�v�V���� - �f�t�H���g�̓��t���N�V�����ɂ�茈�肳���v���p�e�B�̌^�j�F
- �������ʎq�Ƃ��Ďg����R���|�[�l���g�̃N���X�i���̐߂��Ă��������j�B
+ (オプション - デフォルトはリフレクションにより決定されるプロパティの型):
+ 複合識別子として使われるコンポーネントのクラス(次の節を見てください)。
</para>
</listitem>
</itemizedlist>
<para>
- ����3�ڂ̕��@�� <emphasis> ���ʎq�R���|�[�l���g</emphasis> �ƌĂсA
- �قƂ�ǂ��ׂẴA�v���P�[�V�����ɑ��Đ���������@�ł��B
+ この3つ目の方法は <emphasis> 識別子コンポーネント</emphasis> と呼び、
+ ほとんどすべてのアプリケーションに対して推奨する方法です。
</para>
</sect2>
@@ -1043,12 +1044,12 @@
<title>discriminator</title>
<para>
- <literal><discriminator></literal> �v�f�́A
- table-per-class-hierarchy�}�b�s���O�헪��g���|�����[�t�B�b�N�ȉi�����ɕK�v�ł���A
- �e�[�u���̎��ʃJ�������`���܂��B
- ���ʃJ�����́A����s�ɑ��ĉi���w���ǂ̃T�u�N���X��C���X�^���X�����邩��
- �`����}�[�J�[�l��܂�ł��܂��B
- �ȉ��̂悤�Ȍ^�ɐ�������܂��F <literal>string</literal> , <literal>character</literal> ,
+ <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>.
@@ -1072,56 +1073,56 @@
<calloutlist>
<callout arearefs="discriminator1">
<para>
- <literal>column</literal>�i�I�v�V���� - �f�t�H���g�� <literal>class</literal> �j�F
- ���ʃJ�����̖��O�B
+ <literal>column</literal>(オプション - デフォルトは <literal>class</literal> ):
+ 識別カラムの名前。
</para>
</callout>
<callout arearefs="discriminator2">
<para>
<literal>type</literal>
- �i�I�v�V���� - �f�t�H���g�� <literal>string</literal> �j�FHibernate�̌^�������O�B
+ (オプション - デフォルトは <literal>string</literal> ):Hibernateの型を示す名前。
</para>
</callout>
<callout arearefs="discriminator3">
<para>
<literal>force</literal>
- �i�I�v�V���� - �f�t�H���g�� <literal>false</literal> �j�F
- ���[�g�N���X�̂��ׂẴC���X�^���X��������ꍇ�ł����Ă�A
- Hibernate���g�p�ł��鎯�ʃJ�����̎w���u�����v���܂��B
+ (オプション - デフォルトは <literal>false</literal> ):
+ ルートクラスのすべてのインスタンスを検索する場合であっても、
+ Hibernateが使用できる識別カラムの指定を「強制」します。
</para>
</callout>
<callout arearefs="discriminator4">
<para>
<literal>insert</literal>
- �i�I�v�V���� - �f�t�H���g�� <literal>true</literal> �j�F
- ������ʃJ�������}�b�s���O���镡�����ʎq�̈ꕔ�Ȃ�A<literal>false</literal> �Ɛݒ肵�Ă��������B
- (Hibernate��SQL�� <literal>INSERT</literal> �ɂ͊܂܂�Ȃ����Ƃ�m�点��)
+ (オプション - デフォルトは <literal>true</literal> ):
+ もし識別カラムがマッピングする複合識別子の一部ならば、<literal>false</literal> と設定してください。
+ (HibernateにSQLの <literal>INSERT</literal> には含まれないことを知らせる)
</para>
</callout>
<callout arearefs="discriminator5">
<para>
- <literal>formula</literal> (�I�v�V����)�^���]�������Ƃ��Ɏ��s�����C�ӂ�SQL���B
- �R���e���c�x�[�X�̎��ʂ�\�ɂ��܂��B
+ <literal>formula</literal> (オプション)型が評価されるときに実行される任意のSQL式。
+ コンテンツベースの識別を可能にします。
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- ���ʃJ�����̎��ۂ̒l�́A <literal><class></literal> ��
- <literal><subclass></literal> �v�f��
- <literal>discriminator-value</literal> �����Ŏw�肳��܂��B
+ 識別カラムの実際の値は、 <literal><class></literal> と
+ <literal><subclass></literal> 要素の
+ <literal>discriminator-value</literal> 属性で指定されます。
</para>
<para>
- �i���N���X�փ}�b�s���O����Ȃ���]���ȁv���ʒl���s��
- �e�[�u���ɂ���A�i���̂Ƃ��Ɍ���j<literal>force</literal> �����͗L���ł��B
- �������A���ʂ͂����������Ƃ͂���܂���B
+ 永続クラスへマッピングされない「余分な」識別値を持つ行が
+ テーブルにあれば、(そのときに限り)<literal>force</literal> 属性は有効です。
+ ただし、普通はそういうことはありません。
</para>
<para>
- <literal>formula</literal> ������g���ƁA�s�̌^��]�����邽�߂ɔC�ӂ�SQL����錾�ł��܂��B
+ <literal>formula</literal> 属性を使うと、行の型を評価するために任意のSQL式を宣言できます。
</para>
<programlisting><![CDATA[<discriminator
@@ -1131,13 +1132,13 @@
</sect2>
<sect2 id="mapping-declaration-version" revision="4">
- <title>version�i�I�v�V�����j</title>
+ <title>version(オプション)</title>
<para>
- <literal><version></literal> �v�f�̓I�v�V�����ł���A
- �e�[�u�����o�[�W�����f�[�^��܂ނ��Ƃ����܂��B
- ����� <emphasis>�����O�g�����U�N�V����</emphasis>
- ��g�����Ȃ�A���ɖ𗧂��܂��i�ȉ����Ă��������j�B
+ <literal><version></literal> 要素はオプションであり、
+ テーブルがバージョンデータを含むことを示します。
+ これは <emphasis>ロングトランザクション</emphasis>
+ を使うつもりなら、特に役立ちます(以下を見てください)。
</para>
<programlistingco>
@@ -1163,85 +1164,85 @@
<calloutlist>
<callout arearefs="version1">
<para>
- <literal>column</literal>�i�I�v�V���� - �f�t�H���g�̓v���p�e�B���j:
- �o�[�W�����ԍ���ێ�����J�����̖��O�B
+ <literal>column</literal>(オプション - デフォルトはプロパティ名):
+ バージョン番号を保持するカラムの名前。
</para>
</callout>
<callout arearefs="version2">
<para>
- <literal>name</literal> �F�i���N���X�̃v���p�e�B�̖��O�B
+ <literal>name</literal> :永続クラスのプロパティの名前。
</para>
</callout>
<callout arearefs="version3">
<para>
<literal>type</literal>
- �i�I�v�V���� - �f�t�H���g�� <literal>integer</literal> �j�F�o�[�W�����ԍ��̌^�B
+ (オプション - デフォルトは <literal>integer</literal> ):バージョン番号の型。
</para>
</callout>
<callout arearefs="version4">
<para>
<literal>access</literal>
- �i�I�v�V���� - �f�t�H���g�� <literal>property</literal> �j�F
- �v���p�e�B�̒l�ւ̃A�N�Z�X��Hibernate���g���헪�B
+ (オプション - デフォルトは <literal>property</literal> ):
+ プロパティの値へのアクセスにHibernateが使う戦略。
</para>
</callout>
<callout arearefs="version5">
<para>
<literal>unsaved-value</literal>
- �i�I�v�V���� - �f�t�H���g�� <literal>undefined</literal> �j�F
- �C���X�^���X���V�����C���X�^���X�����ꂽ���Ƃ���
- �i�Z�[�u����Ă��Ȃ����Ƃ����j�o�[�W�����v���p�e�B�̒l�B
- �ȑO��Session�ŃZ�[�u�܂��̓��[�h���ꂽ�ꎞ�I�ȃC���X�^���X�Ƌ�ʂ��邽�߂�
- �g���܂��B
- �i <literal>undefined</literal> �͎��ʎq�v���p�e�B�̒l���g���邱�Ƃ�w�肵�܂��B�j
+ (オプション - デフォルトは <literal>undefined</literal> ):
+ インスタンスが新しくインスタンス化されたことを示す
+ (セーブされていないことを示す)バージョンプロパティの値。
+ 以前のSessionでセーブまたはロードされた一時的なインスタンスと区別するために
+ 使います。
+ ( <literal>undefined</literal> は識別子プロパティの値が使われることを指定します。)
</para>
</callout>
<callout arearefs="version6">
<para>
- <literal>generated</literal> (�I�v�V���� - �f�t�H���g�� <literal>never</literal> ):
- ���̃o�[�W�����̃v���p�e�B�̒l���A�f�[�^�x�[�X�ɂ���Đ������ꂽ���Ƃ�w�肵�܂��B
- <xref linkend="mapping-generated">�����v���p�e�B</xref> �̋c�_���Ă��������B
+ <literal>generated</literal> (オプション - デフォルトは <literal>never</literal> ):
+ このバージョンのプロパティの値が、データベースによって生成されたことを指定します。
+ <xref linkend="mapping-generated">生成プロパティ</xref> の議論を見てください。
</para>
</callout>
<callout arearefs="version7">
<para>
- <literal>insert</literal> (�I�v�V���� - �f�t�H���g�� <literal>true</literal> ):
- SQL��insert���Ƀo�[�W�����E�J������܂߂�ׂ����ǂ�����w�肵�܂��B
- ����f�[�^�x�[�X�E�J�����̃f�t�H���g�l�� <literal>0</literal> �ƒ�`�����Ƃ��ɂ́A
- <literal>false</literal> �ɐݒ肷��Ɨǂ��ł��傤�B
+ <literal>insert</literal> (オプション - デフォルトは <literal>true</literal> ):
+ SQLのinsert文にバージョン・カラムを含めるべきかどうかを指定します。
+ もしデータベース・カラムのデフォルト値が <literal>0</literal> と定義されるときには、
+ <literal>false</literal> に設定すると良いでしょう。
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- �o�[�W�����ԍ��� Hibernate�� <literal>long</literal> , <literal>integer</literal> ,
+ バージョン番号は Hibernateの <literal>long</literal> , <literal>integer</literal> ,
<literal>short</literal> , <literal>timestamp</literal> ,
- <literal>calendar</literal> �^�̂����ꂩ�ł��B
+ <literal>calendar</literal> 型のいずれかです。
</para>
<para>
- �o�[�W������^�C���X�^���v�̃v���p�e�B�́A�������ꂽ�C���X�^���X�ɑ���null�ł����Ă͂Ȃ�܂���B
- ���̂��߂ǂ̂悤�� <literal>unsaved-value</literal> �헪���w�肳��Ă�A
- Hibernate��null�̃o�[�W������^�C���X�^���v���������ׂẴC���X�^���X��A
- �ꎞ�I�Ȃ�̂ł���Ɣ��f���܂��B
+ バージョンやタイムスタンプのプロパティは、分離されたインスタンスに対してnullであってはなりません。
+ そのためどのような <literal>unsaved-value</literal> 戦略が指定されても、
+ Hibernateはnullのバージョンやタイムスタンプを持ったすべてのインスタンスを、
+ 一時的なものであると判断します。
- <emphasis> null���e����o�[�W������^�C���X�^���v�̃v���p�e�B���`���邱�Ƃ́A
- �ߓn�I�Ɉꎞ�I�u�W�F�N�g�Ƃ��邱�Ƃ�h���ȒP�ȕ��@�ł��B
- ���Ɏ��ʎq�̊��蓖�Ă╡���L�[��g�p���Ă���Ƃ��ɂ͓��ɗL�p�ł��B</emphasis>
+ <emphasis> nullを許容するバージョンやタイムスタンプのプロパティを定義することは、
+ 過渡的に一時オブジェクトとすることを防ぐ簡単な方法です。
+ 特に識別子の割り当てや複合キーを使用しているときには特に有用です。</emphasis>
</para>
</sect2>
<sect2 id="mapping-declaration-timestamp" revision="4">
- <title>timestamp�i�I�v�V�����j</title>
+ <title>timestamp(オプション)</title>
<para>
- �I�v�V������ <literal><timestamp></literal> �v�f�́A
- �e�[�u�����^�C���X�^���v�f�[�^��܂ނ��Ƃ����܂��B
- ����̓o�[�W�����t���̑���̕��@�Ƃ��ėp�ӂ���Ă��܂��B
- �^�C���X�^���v�͂�Ƃ�Ɗy�ϓI���b�N�ɂ�������S���̒Ⴂ�����ł��B
- �������A�v���P�[�V�����͈قȂ�p�r�Ŏg�����Ƃ���邩�����܂���B
+ オプションの <literal><timestamp></literal> 要素は、
+ テーブルがタイムスタンプデータを含むことを示します。
+ これはバージョン付けの代わりの方法として用意されています。
+ タイムスタンプはもともと楽観的ロックにおける安全性の低い実装です。
+ しかしアプリケーションは異なる用途で使うこともあるかもしれません。
</para>
<programlistingco>
@@ -1265,66 +1266,66 @@
<calloutlist>
<callout arearefs="timestamp1">
<para>
- <literal>column</literal>�i�I�v�V���� - �f�t�H���g�̓v���p�e�B���j�F
- �^�C���X�^���v��ێ�����J�����̖��O�B
+ <literal>column</literal>(オプション - デフォルトはプロパティ名):
+ タイムスタンプを保持するカラムの名前。
</para>
</callout>
<callout arearefs="timestamp2">
<para>
- <literal>name</literal> �F
- �i���N���X�ł���Java �� <literal>Date</literal >�^ �܂���
- <literal>Timestamp</literal> �^ �́AJavaBeans�X�^�C���v���p�e�B�̖��O�B
+ <literal>name</literal> :
+ 永続クラスであるJava の <literal>Date</literal >型 または
+ <literal>Timestamp</literal> 型 の、JavaBeansスタイルプロパティの名前。
</para>
</callout>
<callout arearefs="timestamp3">
<para>
<literal>access</literal>
- �i�I�v�V���� - �f�t�H���g�� <literal>property</literal> �j�F
- �v���p�e�B�̒l�ւ̃A�N�Z�X��Hibernate���g���헪�B
+ (オプション - デフォルトは <literal>property</literal> ):
+ プロパティの値へのアクセスにHibernateが使う戦略。
</para>
</callout>
<callout arearefs="timestamp4">
<para>
<literal>unsaved-value</literal>
- �i�I�v�V���� - �f�t�H���g�� <literal>null</literal> �j�F
- �C���X�^���X���V�����C���X�^���X�����ꂽ
- �i�Z�[�u����Ă��Ȃ��j���Ƃ����o�[�W�����v���p�e�B�̒l�B
- �ȑO��Session�ŃZ�[�u�܂��̓��[�h���ꂽ�ꎞ�I�ȃC���X�^���X��
- ��ʂ��邽�߂Ɏg���܂��B
- �i <literal>undefined</literal> �Ǝw�肷��ƁA
- ���ʎq�v���p�e�B�̒l���g���܂��B�j
+ (オプション - デフォルトは <literal>null</literal> ):
+ インスタンスが新しくインスタンス化された
+ (セーブされていない)ことを示すバージョンプロパティの値。
+ 以前のSessionでセーブまたはロードされた一時的なインスタンスと
+ 区別するために使われます。
+ ( <literal>undefined</literal> と指定すると、
+ 識別子プロパティの値が使われます。)
</para>
</callout>
<callout arearefs="timestamp5">
<para>
- <literal>source</literal> (�I�v�V���� - �f�t�H���g�� <literal>vm</literal> ):
- Hibernate�͂ǂ�����^�C���X�^���v�̒l��擾����ׂ��ł��傤���H
- �f�[�^�x�[�X����ł��傤���A���݂�JVM����ł��傤���H
- �f�[�^�x�[�X�ɂ��^�C���X�^���v�́AHibernate��"���̒l"���肷�邽�߂�
- �f�[�^�x�[�X��q�b�g���Ȃ���Ȃ�Ȃ����߁A�I�[�o�w�b�h�����܂��B
- �������N���X�^���ł�JVM����擾��������S�ł��B
- �f�[�^�x�[�X�̌��݂̃^�C���X�^���v�̎擾��T�|�[�g����
- ���ׂĂ� <literal>�f�[�^�x�[�X����</literal> ���m���Ă���킯�ł͂Ȃ����Ƃ�
- ���ӂ��Ă��������B�܂�����ŁA�������������߂ɁA
- ���b�N�Ŏg�p����ɂ͈��S�łȂ���̂����܂�(�Ⴆ��Oracle 8)�B
+ <literal>source</literal> (オプション - デフォルトは <literal>vm</literal> ):
+ Hibernateはどこからタイムスタンプの値を取得するべきでしょうか?
+ データベースからでしょうか、現在のJVMからでしょうか?
+ データベースによるタイムスタンプは、Hibernateが"次の値"を決定するために
+ データベースをヒットしなければならないため、オーバヘッドを招きます。
+ しかしクラスタ環境ではJVMから取得するより安全です。
+ データベースの現在のタイムスタンプの取得をサポートする
+ すべての <literal>データベース方言</literal> が知られているわけではないことに
+ 注意してください。また一方で、精密さを欠くために、
+ ロックで使用するには安全でないものもあります(例えばOracle 8)。
</para>
</callout>
<callout arearefs="timestamp6">
<para>
- <literal>generated</literal> (�I�v�V���� - �f�t�H���g�� <literal>never</literal> ):
- ���̃^�C���X�^���v�E�v���p�e�B�̒l���A�f�[�^�x�[�X�ɂ���Đ�������邱�Ƃ�w�肵�܂��B
- <xref linkend="mapping-generated">�����v���p�e�B</xref> ��Q�Ƃ��Ă��������B
+ <literal>generated</literal> (オプション - デフォルトは <literal>never</literal> ):
+ このタイムスタンプ・プロパティの値が、データベースによって生成されることを指定します。
+ <xref linkend="mapping-generated">生成プロパティ</xref> を参照してください。
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- <literal><timestamp></literal> ��
- <literal><version type="timestamp"></literal> �Ɠ����ł��邱�Ƃɒ��ӂ��Ă��������B
- <literal><timestamp source="db"></literal> ��
- <literal><version type="dbtimestamp"></literal> �Ɠ����ł��邱�Ƃɒ��ӂ��Ă��������B
+ <literal><timestamp></literal> は
+ <literal><version type="timestamp"></literal> と等価であることに注意してください。
+ <literal><timestamp source="db"></literal> は
+ <literal><version type="dbtimestamp"></literal> と等価であることに注意してください。
</para>
</sect2>
@@ -1332,7 +1333,7 @@
<title>property</title>
<para>
- <literal><property></literal> �v�f�́A�N���X�̉i���I��JavaBean�X�^�C���̃v���p�e�B���`���܂��B
+ <literal><property></literal> 要素は、クラスの永続的なJavaBeanスタイルのプロパティを定義します。
</para>
<programlistingco>
@@ -1375,135 +1376,135 @@
<calloutlist>
<callout arearefs="property1">
<para>
- <literal>name</literal>�F�������Ŏn�܂�v���p�e�B���B
+ <literal>name</literal>:小文字で始まるプロパティ名。
</para>
</callout>
<callout arearefs="property2">
<para>
- <literal>column</literal>�i�I�v�V���� - �f�t�H���g�̓v���p�e�B���j�F
- �}�b�s���O���ꂽ�f�[�^�x�[�X�e�[�u���̃J�����̖��O�B
- �l�X�g���� <literal><column></literal> �v�f�ł�w��ł��܂��B
+ <literal>column</literal>(オプション - デフォルトはプロパティ名):
+ マッピングされたデータベーステーブルのカラムの名前。
+ ネストした <literal><column></literal> 要素でも指定できます。
</para>
</callout>
<callout arearefs="property3">
<para>
- <literal>type</literal>�i�I�v�V�����j�FHibernate�̌^�������O�B
+ <literal>type</literal>(オプション):Hibernateの型を示す名前。
</para>
</callout>
<callout arearefs="property4-5">
<para>
<literal>update, insert</literal>
- �i�I�v�V���� - �f�t�H���g�� <literal>true</literal> �j�F
- �}�b�s���O���ꂽ�J������SQL��
- <literal>UPDATE</literal> �� <literal>INSERT</literal> �Ɋ܂܂�邱�Ƃ�w�肵�܂��B
- �����Ƃ� <literal>false</literal> �ɐݒ肷��ƁA
- �����J�����Ƀ}�b�s���O���ꂽ���̃v���p�e�B��g���K��
- ���̃A�v���P�[�V�����ɂ���ď��������ꂽ�����ȁu���o�v�v���p�e�B���\�ɂȂ�܂��B
+ (オプション - デフォルトは <literal>true</literal> ):
+ マッピングされたカラムがSQLの
+ <literal>UPDATE</literal> や <literal>INSERT</literal> に含まれることを指定します。
+ 両方とも <literal>false</literal> に設定すると、
+ 同じカラムにマッピングされた他のプロパティやトリガや
+ 他のアプリケーションによって初期化された純粋な「導出」プロパティが可能になります。
</para>
</callout>
<callout arearefs="property6">
<para>
- <literal>formula</literal>�i�I�v�V�����j�F
- <emphasis>�v�Z</emphasis> �v���p�e�B�̂��߂̒l���`����SQL���B
- �v�Z���ꂽ�v���p�e�B�͎��g�̃J�����ւ̃}�b�s���O������܂���B
+ <literal>formula</literal>(オプション):
+ <emphasis>計算</emphasis> プロパティのための値を定義するSQL式。
+ 計算されたプロパティは自身のカラムへのマッピングがありません。
</para>
</callout>
<callout arearefs="property7">
<para>
- <literal>access</literal>�i�I�v�V���� - �f�t�H���g�� <literal>property</literal> �j�F
- �v���p�e�B�̒l�ւ̃A�N�Z�X��Hibernate���g���헪�B
+ <literal>access</literal>(オプション - デフォルトは <literal>property</literal> ):
+ プロパティの値へのアクセスにHibernateが使う戦略。
</para>
</callout>
<callout arearefs="property8">
<para>
- <literal>lazy</literal> (optional - �f�t�H���g�� <literal>false</literal> ):
- �C���X�^���X�ϐ��ɍŏ��ɃA�N�Z�X�����Ƃ��ɁA�v���p�e�B��x�����Ď擾����悤�w�肵�܂��B
- (�o�C�g�R�[�h������쐬���鎞�Ԃ��K�v�ɂȂ�܂�)�B
+ <literal>lazy</literal> (optional - デフォルトは <literal>false</literal> ):
+ インスタンス変数に最初にアクセスしたときに、プロパティを遅延して取得するよう指定します。
+ (バイトコード実装を作成する時間が必要になります)。
</para>
</callout>
<callout arearefs="property9">
<para>
- <literal>unique</literal> (�I�v�V����):�J�����Ƀ��j�[�N��������DDL�̐�����\�ɂ��܂��B
- �܂��A<literal>property-ref</literal> �̃^�[�Q�b�g�Ƃ��邱�Ƃ�ł��܂��B
+ <literal>unique</literal> (オプション):カラムにユニーク制約をつけるDDLの生成を可能にします。
+ また、<literal>property-ref</literal> のターゲットとすることもできます。
</para>
</callout>
<callout arearefs="property10">
<para>
- <literal>not-null</literal> (�I�v�V����):�J������null�l������DDL�̐�����\�ɂ��܂��B
+ <literal>not-null</literal> (オプション):カラムにnull値を許可するDDLの生成を可能にします。
</para>
</callout>
<callout arearefs="property11">
<para>
- <literal>optimistic-lock</literal> (�I�v�V���� - �f�t�H���g�� <literal>true</literal> ):
- ���̃v���p�e�B�̍X�V�Ɋy�σ��b�N�̎擾��v�����邩�ǂ�����w�肵�܂��B
- ����������A���̃v���p�e�B���_�[�e�B�ł���Ƃ��Ƀo�[�W�����𑝂₷�ׂ������肵�܂��B
+ <literal>optimistic-lock</literal> (オプション - デフォルトは <literal>true</literal> ):
+ このプロパティの更新に楽観ロックの取得を要求するかどうかを指定します。
+ 言い換えれば、このプロパティがダーティであるときにバージョンを増やすべきかを決定します。
</para>
</callout>
<callout arearefs="property12">
<para>
- <literal>generated</literal> (�I�v�V���� - �f�t�H���g�� <literal>never</literal> ):
- �v���p�e�B�̒l���A�f�[�^�x�[�X�ɂ���Đ������ꂽ���Ƃ�w�肵�܂��B
- <xref linkend="mapping-generated">�����v���p�e�B</xref> ��Q�Ƃ��Ă��������B
+ <literal>generated</literal> (オプション - デフォルトは <literal>never</literal> ):
+ プロパティの値が、データベースによって生成されたことを指定します。
+ <xref linkend="mapping-generated">生成プロパティ</xref> を参照してください。
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- <emphasis>typename</emphasis> �ɂ͈ȉ��̒l���\�ł��F
+ <emphasis>typename</emphasis> には以下の値が可能です:
</para>
<orderedlist spacing="compact">
<listitem>
<para>
- Hibernate�̊�{�^�̖��O�i�� <literal>integer, string, character,
- date, timestamp, float, binary, serializable, object, blob</literal> �j�B
+ Hibernateの基本型の名前(例 <literal>integer, string, character,
+ date, timestamp, float, binary, serializable, object, blob</literal> )。
</para>
</listitem>
<listitem>
<para>
- �f�t�H���g�̊�{�^��Java�N���X�� �i�� <literal>int, float,
- char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob</literal> �j�B
+ デフォルトの基本型のJavaクラス名 (例 <literal>int, float,
+ char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob</literal> )。
</para>
</listitem>
<listitem>
<para>
- �V���A���C�Y�\��Java�N���X�̖��O�B
+ シリアライズ可能なJavaクラスの名前。
</para>
</listitem>
<listitem>
<para>
- �J�X�^���^�̃N���X���i�� <literal>com.illflow.type.MyCustomType</literal> �j�B
+ カスタム型のクラス名(例 <literal>com.illflow.type.MyCustomType</literal> )。
</para>
</listitem>
</orderedlist>
<para>
- �^��w�肵�Ȃ���AHibernate�͐�����Hibernate�̌^�𐄑����邽�߂ɁA
- �w�肳�ꂽ�v���p�e�B�ɑ��ă��t���N�V������g���܂��B
- Hibernate�̓��[��2, 3, 4���̏����Ɏg���A
- getter�v���p�e�B�̕Ԃ�l�̃N���X�̖��O���߂��悤�Ƃ��܂��B
- ����������ŏ�ɏ\���ł���Ƃ͌���܂���B
- �ꍇ�ɂ���ẮA<literal>type</literal> �������K�v�ȏꍇ������܂��B
- �i�Ⴆ�� <literal>Hibernate.DATE</literal> �� <literal>Hibernate.TIMESTAMP</literal> ���ʂ��邽�߁A
- �܂��̓J�X�^���^��w�肷�邽�߂Ȃǂł��B�j
+ 型を指定しなければ、Hibernateは正しいHibernateの型を推測するために、
+ 指定されたプロパティに対してリフレクションを使います。
+ Hibernateはルール2, 3, 4をその順序に使い、
+ getterプロパティの返り値のクラスの名前を解釈しようとします。
+ しかしこれで常に十分であるとは限りません。
+ 場合によっては、<literal>type</literal> 属性が必要な場合があります。
+ (例えば <literal>Hibernate.DATE</literal> と <literal>Hibernate.TIMESTAMP</literal> を区別するため、
+ またはカスタム型を指定するためなどです。)
</para>
<para>
- <literal>access</literal> �����ŁA
- ���s����Hibernate���ǂ̂悤�Ƀv���p�e�B�ɃA�N�Z�X���邩�𐧌�ł��܂��B
- �f�t�H���g�ł�Hibernate�̓v���p�e�B��get/set�̃y�A��R�[�����܂��B
- <literal>access="field"</literal> �Ǝw�肷��A
- Hibernate�̓��t���N�V������g��get/set�̃y�A�����ɁA���ڃt�B�[���h�ɃA�N�Z�X���܂��B
- �C���^�[�t�F�C�X <literal>org.hibernate.property.PropertyAccessor</literal> ��
- ��������N���X��w�肷�邱�ƂŁA�v���p�e�B�ւ̃A�N�Z�X�ɓƎ��̐헪��w�肷�邱�Ƃ��ł��܂��B
+ <literal>access</literal> 属性で、
+ 実行時にHibernateがどのようにプロパティにアクセスするかを制御できます。
+ デフォルトではHibernateはプロパティのget/setのペアをコールします。
+ <literal>access="field"</literal> と指定すれば、
+ Hibernateはリフレクションを使いget/setのペアを介さずに、直接フィールドにアクセスします。
+ インターフェイス <literal>org.hibernate.property.PropertyAccessor</literal> を
+ 実装するクラスを指定することで、プロパティへのアクセスに独自の戦略を指定することができます。
</para>
<para>
- ���ɋ��͂ȓ����͐����v���p�e�B�ł��B
- �����̃v���p�e�B�͓��R�ǂݎ���p�ł���A�v���p�e�B�̒l�̓��[�h���Ɍv�Z����܂��B
- �v�Z��SQL���Ƃ��Đ錾����ƁA���̃v���p�e�B��
- �C���X�^���X���[�h����SQL�N�G���� <literal>SELECT</literal> ��̃T�u�N�G���ɕϊ�����܂��B
+ 特に強力な特徴は生成プロパティです。
+ これらのプロパティは当然読み取り専用であり、プロパティの値はロード時に計算されます。
+ 計算をSQL式として宣言すると、このプロパティは
+ インスタンスをロードするSQLクエリの <literal>SELECT</literal> 句のサブクエリに変換されます。
</para>
<programlisting><![CDATA[
@@ -1514,10 +1515,10 @@
AND li.orderNumber = orderNumber )"/>]]></programlisting>
<para>
- ����̃J����(��ł� <literal>customerId</literal> ������ɂ�����܂�)�̃G�C���A�X��錾���邱�ƂȂ��A
- �G���e�B�e�B���g�̃e�[�u����Q�Ƃł��邱�Ƃɒ��ӂ��Ă��������B
- ���������g�p�������Ȃ���A
- �l�X�g���� <literal><formula></literal> �}�b�s���O�v�f��g���邱�Ƃɂ���ӂ��Ă��������B
+ 特定のカラム(例では <literal>customerId</literal> がそれにあたります)のエイリアスを宣言することなく、
+ エンティティ自身のテーブルを参照できることに注意してください。
+ もし属性を使用したくなければ、
+ ネストした <literal><formula></literal> マッピング要素を使えることにも注意してください。
</para>
</sect2>
@@ -1526,9 +1527,9 @@
<title>many-to-one</title>
<para>
- ���̉i���N���X�ւ̒ʏ�̊֘A�� <literal>many-to-one</literal> �v�f��g���Ē�`���܂��B
- �����[�V���i�����f���͑��Έ�֘A�ł��B
- �܂肠��e�[�u���̊O���L�[�́A�^�[�Q�b�g�ƂȂ�e�[�u���̎�L�[�J������Q�Ƃ��Ă��܂��B
+ 他の永続クラスへの通常の関連は <literal>many-to-one</literal> 要素を使って定義します。
+ リレーショナルモデルは多対一関連です。
+ つまりあるテーブルの外部キーは、ターゲットとなるテーブルの主キーカラムを参照しています。
</para>
<programlistingco>
@@ -1578,156 +1579,156 @@
<calloutlist>
<callout arearefs="manytoone1">
<para>
- <literal>name</literal>�F�v���p�e�B���B
+ <literal>name</literal>:プロパティ名。
</para>
</callout>
<callout arearefs="manytoone2">
<para>
- <literal>column</literal> (�I�v�V����):�O���L�[�J�����̖��O�B
- �l�X�g���� <literal><column></literal> �v�f�ł�w��ł��܂��B
+ <literal>column</literal> (オプション):外部キーカラムの名前。
+ ネストした <literal><column></literal> 要素でも指定できます。
</para>
</callout>
<callout arearefs="manytoone3">
<para>
- <literal>class</literal>�i�I�v�V���� - �f�t�H���g�́A
- ���t���N�V�����ɂ�茈�肳���v���p�e�B�̌^�j�F�֘A�N���X�̖��O�B
+ <literal>class</literal>(オプション - デフォルトは、
+ リフレクションにより決定されるプロパティの型):関連クラスの名前。
</para>
</callout>
<callout arearefs="manytoone4">
<para>
- <literal>cascade</literal>�i�I�v�V�����j�F
- �ǂ̑����A�e�I�u�W�F�N�g����֘A�I�u�W�F�N�g�ւƃJ�X�P�[�h�����邩��w�肵�܂��B
+ <literal>cascade</literal>(オプション):
+ どの操作を、親オブジェクトから関連オブジェクトへとカスケードさせるかを指定します。
</para>
</callout>
<callout arearefs="manytoone5">
<para>
- <literal>fetch</literal> (�I�v�V���� - �f�t�H���g�� <literal>select</literal> ):
- �O�������t�F�b�`�������I��t�F�b�`�isequential select fetch�j��I���܂��B
+ <literal>fetch</literal> (オプション - デフォルトは <literal>select</literal> ):
+ 外部結合フェッチか順次選択フェッチ(sequential select fetch)を選択します。
</para>
</callout>
<callout arearefs="manytoone6-7">
<para>
- <literal>update, insert</literal>�i�I�v�V���� - �f�t�H���g�� <literal>true</literal> �j�F
- �}�b�s���O���ꂽ�J������SQL�� <literal>UPDATE</literal> �܂���
- <literal>INSERT</literal> ���Ɋ܂܂�邱�Ƃ�w�肵�܂��B
- �����Ƃ� <literal>false</literal> �ɐݒ肷��ƁA
- ���̒l�������J�����Ƀ}�b�s���O���ꂽ���̃v���p�e�B��g���K��
- ���̃A�v���P�[�V�����ɂ���ď��������ꂽ�����ȁu���o�v�v���p�e�B���\�ɂȂ�܂��B
+ <literal>update, insert</literal>(オプション - デフォルトは <literal>true</literal> ):
+ マッピングされたカラムがSQLの <literal>UPDATE</literal> または
+ <literal>INSERT</literal> 文に含まれることを指定します。
+ 両方とも <literal>false</literal> に設定すると、
+ その値が同じカラムにマッピングされた他のプロパティやトリガや
+ 他のアプリケーションによって初期化された純粋な「導出」プロパティが可能になります。
</para>
</callout>
<callout arearefs="manytoone8">
<para>
- <literal>property-ref</literal>�i�I�v�V�����j�F
- ���̊O���L�[�Ɍ������ꂽ�֘A�N���X�̃v���p�e�B���B
- ����w�肵�Ȃ���A�֘A�N���X�̎�L�[���g���܂��B
+ <literal>property-ref</literal>(オプション):
+ この外部キーに結合された関連クラスのプロパティ名。
+ 何も指定しなければ、関連クラスの主キーが使われます。
</para>
</callout>
<callout arearefs="manytoone9">
<para>
- <literal>access</literal>�i�I�v�V���� - �f�t�H���g�� <literal>property</literal> �j�F
- �v���p�e�B�̒l�ւ̃A�N�Z�X��Hibernate���g���헪�B
+ <literal>access</literal>(オプション - デフォルトは <literal>property</literal> ):
+ プロパティの値へのアクセスにHibernateが使う戦略。
</para>
</callout>
<callout arearefs="manytoone10">
<para>
- <literal>unique</literal>�i�I�v�V�����j�F
- �O���L�[�J�����ɑ��ă��j�[�N��������DDL�̐�����\�ɂ��܂��B
- �܂��A<literal>property-ref</literal> �̃^�[�Q�b�g�ɂ��邱�Ƃ�ł��܂��B
- ����ɂ��֘A�̑��d�x����ʓI�Ɉ�Έ�ɂ��܂��B
+ <literal>unique</literal>(オプション):
+ 外部キーカラムに対してユニーク制約をつけたDDLの生成を可能にします。
+ また、<literal>property-ref</literal> のターゲットにすることもできます。
+ これにより関連の多重度を効果的に一対一にします。
</para>
</callout>
<callout arearefs="manytoone11">
<para>
- <literal>not-null</literal> (�I�v�V����):�O���L�[�J�����ɑ��āA
- null�l������DDL�̐�����\�ɂ��܂�
+ <literal>not-null</literal> (オプション):外部キーカラムに対して、
+ null値を許可するDDLの生成を可能にします
</para>
</callout>
<callout arearefs="manytoone12">
<para>
- <literal>optimistic-lock</literal> (�I�v�V���� - �f�t�H���g�� <literal>true</literal> ):
- ���̃v���p�e�B�̍X�V�Ɋy�ϓI���b�N�̎擾��v�����邩�ǂ�����w�肵�܂��B
- ����������A���̃v���p�e�B���_�[�e�B�ł���Ƃ��Ƀo�[�W�����𑝂₷�ׂ������肵�܂��B
+ <literal>optimistic-lock</literal> (オプション - デフォルトは <literal>true</literal> ):
+ このプロパティの更新に楽観的ロックの取得を要求するかどうかを指定します。
+ 言い換えれば、このプロパティがダーティであるときにバージョンを増やすべきかを決定します。
</para>
</callout>
<callout arearefs="manytoone13">
<para>
- <literal>lazy</literal> (�I�v�V���� - �f�t�H���g�� <literal>proxy</literal> ):
- �f�t�H���g�ł́A���d�x�P�̊֘A���v���L�V�ƂȂ�܂��B
- <literal>lazy="no-proxy"</literal> �́A�C���X�^���X�ϐ��ɍŏ��ɃA�N�Z�X�����Ƃ��ɁA
- �v���p�e�B��x���t�F�b�`����悤�w�肵�܂�
- (�r���h���Ƀo�C�g�R�[�h�������K�v�ɂȂ�܂�)�B
- <literal>lazy="false"</literal> �͊֘A���ɑ����Ƀt�F�b�`����悤�w�肵�܂��B
+ <literal>lazy</literal> (オプション - デフォルトは <literal>proxy</literal> ):
+ デフォルトでは、多重度1の関連がプロキシとなります。
+ <literal>lazy="no-proxy"</literal> は、インスタンス変数に最初にアクセスしたときに、
+ プロパティを遅延フェッチするよう指定します
+ (ビルド時にバイトコード実装が必要になります)。
+ <literal>lazy="false"</literal> は関連を常に即時にフェッチするよう指定します。
</para>
</callout>
<callout arearefs="manytoone14">
<para>
- <literal>not-found</literal> (�I�v�V���� - �f�t�H���g�� <literal>exception</literal> ):
- ���������s��Q�Ƃ���O���L�[��ǂ̂悤�Ɉ�������w�肵�܂��B
- <literal>ignore</literal> �͌��������s��null�֘A�Ƃ��Ĉ����܂��B
+ <literal>not-found</literal> (オプション - デフォルトは <literal>exception</literal> ):
+ 欠落した行を参照する外部キーをどのように扱うかを指定します。
+ <literal>ignore</literal> は欠落した行をnull関連として扱います。
</para>
</callout>
<callout arearefs="manytoone15">
<para>
- <literal>entity-name</literal> (�I�v�V����):�֘A�����N���X�̃G���e�B�e�B���B
+ <literal>entity-name</literal> (オプション):関連したクラスのエンティティ名。
</para>
</callout>
</calloutlist>
<callout arearefs="manytoone16">
<para>
- <literal>formula</literal> (�I�v�V����):
- <emphasis> �v�Z���ꂽ</emphasis> �O���L�[�ɑ��Ēl���`����SQL��
+ <literal>formula</literal> (オプション):
+ <emphasis> 計算された</emphasis> 外部キーに対して値を定義するSQL式
</para>
</callout>
</programlistingco>
<para>
- <literal>cascade</literal> ������ <literal>none</literal> �ȊO�̈Ӗ��̂���l���ݒ肷��ƁA
- �֘A�I�u�W�F�N�g�ւ��鑀�삪�`�d���邱�ƂɂȂ�܂��B
- �Ӗ��̂���l�Ƃ�Hibernate�̊�{����̖��O�̂��ƂŁA
- <literal>delete-orphan</literal> �� <literal>all</literal> �A���얼��J���}�ŋ�����g�ݍ��킹
- �i�Ⴆ�� <literal>cascade="persist,merge,evict"</literal> ��
- <literal>cascade="all,delete-orphan"</literal>�j�A
- �܂����ꂾ���łȂ� <literal>persist, merge, delete, save-update, evict, replicate, lock,
- refresh</literal> �̂��Ƃ�w���܂��B
- �ڂ�������� <xref linkend="objectstate-transitive"/> ���Ă��������B
- �l����̊֘A(many-to-one��one-to-one�֘A)�́A
- �P�Ƃł̍폜�iorphan delete)��T�|�[�g���Ă��Ȃ����Ƃɒ��ӂ��Ă��������B
+ <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)をサポートしていないことに注意してください。
</para>
<para>
- �T�^�I�� <literal>many-to-one</literal> �錾�͎��̂悤�ɃV���v���ł��B�F
+ 典型的な <literal>many-to-one</literal> 宣言は次のようにシンプルです。:
</para>
<programlisting><![CDATA[<many-to-one name="product" class="Product" column="PRODUCT_ID"/>]]></programlisting>
<para>
- <literal>property-ref</literal> �����́A�O���L�[���֘A�t����ꂽ�e�[�u���́A��L�[�łȂ�
- ���j�[�N�L�[��Q�Ƃ��Ă��郌�K�V�[�f�[�^��}�b�v���邽�߂ɂ����g���ׂ��ł��B
- ����͏X�������[�V���i�����f���ł��B
- �Ⴆ�� <literal>Product</literal> �N���X���A
- ��L�[�łȂ����j�[�N�ȃV���A���i���o�[�����Ă���Ɖ��肵�Ă݂Ă��������B
- �i <literal>unique</literal> ������SchemaExport�c�[����g����Hibernate��DDL�����𐧌䂵�܂��B�j
+ <literal>property-ref</literal> 属性は、外部キーが関連付けられたテーブルの、主キーでない
+ ユニークキーを参照しているレガシーデータをマップするためにだけ使うべきです。
+ これは醜いリレーショナルモデルです。
+ 例えば <literal>Product</literal> クラスが、
+ 主キーでないユニークなシリアルナンバーを持っていると仮定してみてください。
+ ( <literal>unique</literal> 属性はSchemaExportツールを使ったHibernateのDDL生成を制御します。)
</para>
<programlisting><![CDATA[<property name="serialNumber" unique="true" type="string" column="SERIAL_NUMBER"/>]]></programlisting>
<para>
- �ȉ��̂悤�� <literal>OrderItem</literal> �ɑ��ă}�b�s���O��g���܂��F
+ 以下のように <literal>OrderItem</literal> に対してマッピングを使えます:
</para>
<programlisting><![CDATA[<many-to-one name="product" property-ref="serialNumber" column="PRODUCT_SERIAL_NUMBER"/>]]></programlisting>
<para>
- �������A����͌����Đ����ł��܂���B
+ しかし、これは決して推奨できません。
</para>
<para>
- �Q�Ƃ������j�[�N�L�[���A�֘A����G���e�B�e�B�̑����̃v���p�e�B����\�������ꍇ�A
- �w�肵�� <literal><properties></literal> �v�f��ŁA�Q�Ƃ���v���p�e�B��}�b�s���O����ׂ��ł��B
+ 参照したユニークキーが、関連するエンティティの多数のプロパティから構成される場合、
+ 指定した <literal><properties></literal> 要素内で、参照するプロパティをマッピングするべきです。
</para>
<para>
- ����Q�Ƃ������j�[�N�L�[���R���|�[�l���g�̃v���p�e�B�ł���ꍇ�́A�v���p�e�B�̃p�X��w��ł��܂��B
+ もし参照したユニークキーがコンポーネントのプロパティである場合は、プロパティのパスを指定できます。
</para>
<programlisting><![CDATA[<many-to-one name="owner" property-ref="identity.ssn" column="OWNER_SSN"/>]]></programlisting>
@@ -1740,7 +1741,7 @@
<title>one-to-one</title>
<para>
- ���̉i���N���X�ւ̈�Έ�֘A�́A<literal>one-to-one</literal> �v�f�Œ�`���܂��B
+ 他の永続クラスへの一対一関連は、<literal>one-to-one</literal> 要素で定義します。
</para>
<programlistingco>
@@ -1774,112 +1775,112 @@
<calloutlist>
<callout arearefs="onetoone1">
<para>
- <literal>name</literal>�F�v���p�e�B���B
+ <literal>name</literal>:プロパティ名。
</para>
</callout>
<callout arearefs="onetoone2">
<para>
- <literal>class</literal>�i�I�v�V���� -
- �f�t�H���g�̓��t���N�V�����ɂ�茈�肳���v���p�e�B�̌^�j�F
- �֘A�N���X�̖��O�B
+ <literal>class</literal>(オプション -
+ デフォルトはリフレクションにより決定されるプロパティの型):
+ 関連クラスの名前。
</para>
</callout>
<callout arearefs="onetoone3">
<para>
- <literal>cascade</literal>�i�I�v�V�����j�F
- �e�I�u�W�F�N�g����֘A�I�u�W�F�N�g�ցA�ǂ̑����J�X�P�[�h���邩��w�肵�܂��B
+ <literal>cascade</literal>(オプション):
+ 親オブジェクトから関連オブジェクトへ、どの操作をカスケードするかを指定します。
</para>
</callout>
<callout arearefs="onetoone4">
<para>
- <literal>constrained</literal>�i�I�v�V�����j�F
- �}�b�s���O���ꂽ�e�[�u���̎�L�[�ɑ���O���L�[���A
- �֘A�N���X�̃e�[�u����Q�Ƃ��邱�Ƃ�w�肵�܂��B
- ���̃I�v�V������ <literal>save()</literal> ��
- <literal>delete()</literal> ���J�X�P�[�h����鏇���ɉe�����A
- �����Ċ֘A���v���L�V����邩�ǂ����ɂ�e�����܂�
- �i�����ăX�L�[�}�G�N�X�|�[�g�c�[���ɂ�g���܂��j�B
+ <literal>constrained</literal>(オプション):
+ マッピングされたテーブルの主キーに対する外部キー制約が、
+ 関連クラスのテーブルを参照することを指定します。
+ このオプションは <literal>save()</literal> と
+ <literal>delete()</literal> がカスケードされる順序に影響し、
+ そして関連がプロキシされるかどうかにも影響します
+ (そしてスキーマエクスポートツールにも使われます)。
</para>
</callout>
<callout arearefs="onetoone5">
<para>
- <literal>fetch</literal>�i�I�v�V���� - �f�t�H���g�� <literal>select</literal> �j�F
- �O�������t�F�b�`�Ə����I��t�F�b�`�isequential select fetch�j�̂ǂ��炩��I���܂��B
+ <literal>fetch</literal>(オプション - デフォルトは <literal>select</literal> ):
+ 外部結合フェッチと順次選択フェッチ(sequential select fetch)のどちらかを選択します。
</para>
</callout>
<callout arearefs="onetoone6">
<para>
- <literal>property-ref</literal>�i�I�v�V�����j�F
- ���̃N���X�̎�L�[�Ɍ������ꂽ�֘A�N���X�̃v���p�e�B���B
- �w�肳��Ȃ���A�֘A�N���X�̎�L�[���g���܂��B
+ <literal>property-ref</literal>(オプション):
+ このクラスの主キーに結合された関連クラスのプロパティ名。
+ 指定されなければ、関連クラスの主キーが使われます。
</para>
</callout>
<callout arearefs="onetoone7">
<para>
- <literal>access</literal>�i�I�v�V���� - �f�t�H���g�� <literal>property</literal> �j�F
- �v���p�e�B�̒l�ւ̃A�N�Z�X��Hibernate���g���헪�B
+ <literal>access</literal>(オプション - デフォルトは <literal>property</literal> ):
+ プロパティの値へのアクセスにHibernateが使う戦略。
</para>
</callout>
<callout arearefs="onetoone8">
<para>
- <literal>formula</literal> (�I�v�V����):
- �قƂ�ǂ��ׂĂ̈�Έ�֘A�̓I�[�i�[�̃G���e�B�e�B�̎�L�[�ւƃ}�b�s���O����܂��B
- ����ȊO�̋H�ȏꍇ�́A
- ���̃J������A�����̃J�����ASQL�\����g�����������邽�߂̎���w��ł��܂��B
- �i��� <literal>org.hibernate.test.onetooneformula</literal> ��Q�Ƃ��Ă��������B�j
+ <literal>formula</literal> (オプション):
+ ほとんどすべての一対一関連はオーナーのエンティティの主キーへとマッピングされます。
+ これ以外の稀な場合は、
+ 他のカラムや、複数のカラム、SQL構文を使った結合するための式を指定できます。
+ (例は <literal>org.hibernate.test.onetooneformula</literal> を参照してください。)
</para>
</callout>
<callout arearefs="onetoone9">
<para>
- <literal>lazy</literal> (�I�v�V���� - �f�t�H���g�� <literal>proxy</literal> ):
- �f�t�H���g�ł́A���d�x�P�̊֘A���v���L�V�ƂȂ�܂��B
- <literal>lazy="no-proxy"</literal> �́A�C���X�^���X�ϐ��ɍŏ��ɃA�N�Z�X�����Ƃ��ɁA
- �v���p�e�B��x���t�F�b�`����悤�w�肵�܂�
- (�r���h���Ƀo�C�g�R�[�h�������K�v�ɂȂ�܂�)�B
- <literal>lazy="false"</literal> �͊֘A���ɑ����Ƀt�F�b�`����悤�w�肵�܂��B
- <emphasis>��� <literal>constrained="false"</literal> �Ȃ�A
- �v���L�V�͎g�p�s�\�ƂȂ�A�֘A���Ƀt�F�b�`���邱�Ƃɒ��ӂ��Ă��������I</emphasis>
+ <literal>lazy</literal> (オプション - デフォルトは <literal>proxy</literal> ):
+ デフォルトでは、多重度1の関連がプロキシとなります。
+ <literal>lazy="no-proxy"</literal> は、インスタンス変数に最初にアクセスしたときに、
+ プロパティを遅延フェッチするよう指定します
+ (ビルド時にバイトコード実装が必要になります)。
+ <literal>lazy="false"</literal> は関連を常に即時にフェッチするよう指定します。
+ <emphasis>もし <literal>constrained="false"</literal> ならば、
+ プロキシは使用不可能となり、関連を即時にフェッチすることに注意してください!</emphasis>
</para>
</callout>
<callout arearefs="onetoone10">
<para>
- <literal>entity-name</literal> (�I�v�V����):�֘A�N���X�̃G���e�B�e�B��
+ <literal>entity-name</literal> (オプション):関連クラスのエンティティ名
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- ��Έ�֘A�ɂ�2��ނ���܂��F
+ 一対一関連には2種類あります:
</para>
<itemizedlist>
<listitem><para>
- ��L�[�֘A
+ 主キー関連
</para></listitem>
<listitem><para>
- ���j�[�N�O���L�[�֘A
+ ユニーク外部キー関連
</para></listitem>
</itemizedlist>
<para>
- ��L�[�֘A�ɂ́A���ʂȃe�[�u���J�����͕K�v����܂���B
- ���2�̍s���֘A�ɂ��W���Ă���A2�̃e�[�u���͓�����L�[�̒l���L���܂��B
- ���̂���2�̃I�u�W�F�N�g���L�[�֘A�ɂ���Ċ֘A�t�������̂ł���A
- �m���ɓ������ʎq�̒l�������Ȃ���Ȃ�܂���B
+ 主キー関連には、特別なテーブルカラムは必要ありません。
+ もし2つの行が関連により関係していれば、2つのテーブルは同じ主キーの値を共有します。
+ そのため2つのオブジェクトを主キー関連によって関連付けたいのであれば、
+ 確実に同じ識別子の値を代入しなければなりません。
</para>
<para>
- ��L�[�֘A��s�����߂ɂ́A�ȉ��̃}�b�s���O�� <literal>Employee</literal> ��
- <literal>Person</literal> �̂��ꂼ��ɒlj����Ă��������B
+ 主キー関連を行うためには、以下のマッピングを <literal>Employee</literal> と
+ <literal>Person</literal> のそれぞれに追加してください。
</para>
<programlisting><![CDATA[<one-to-one name="person" class="Person"/>]]></programlisting>
<programlisting><![CDATA[<one-to-one name="employee" class="Employee" constrained="true"/>]]></programlisting>
<para>
- �����ŁAPERSON��EMPLOYEE�e�[�u���̊W����s�̎�L�[�������ł��邱�Ƃ�m���ɂ��Ȃ�������܂���B
- �����ł́A<literal>foreign</literal> �Ƃ��������Hibernate���ʎq�����헪��g���܂��F
+ ここで、PERSONとEMPLOYEEテーブルの関係する行の主キーが同じであることを確実にしなければいけません。
+ ここでは、<literal>foreign</literal> という特殊なHibernate識別子生成戦略を使います:
</para>
<programlisting><![CDATA[<class name="person" table="PERSON">
@@ -1895,25 +1896,25 @@
</class>]]></programlisting>
<para>
- <literal>Employee</literal> �C���X�^���X���A<literal>Person</literal> ��
- <literal>employee</literal> �v���p�e�B�ŎQ�Ƃ����悤�ɁA
- �V�����Z�[�u���ꂽ <literal>Person</literal> �̃C���X�^���X�ɂ͓�����L�[�̒l���������܂��B
+ <literal>Employee</literal> インスタンスが、<literal>Person</literal> の
+ <literal>employee</literal> プロパティで参照されるように、
+ 新しくセーブされた <literal>Person</literal> のインスタンスには同じ主キーの値が代入されます。
- �V�����Z�[�u���� <literal>Person</literal> �C���X�^���X�́A
- ���� <literal>Person</literal> �� <literal>employee</literal> �v���p�e�B���Q�Ƃ���
- <literal>Employee</literal> �C���X�^���X�Ƃ��ē�����L�[�����蓖�Ă��܂��B
+ 新しくセーブする <literal>Person</literal> インスタンスは、
+ その <literal>Person</literal> の <literal>employee</literal> プロパティが参照する
+ <literal>Employee</literal> インスタンスとして同じ主キーが割り当てられます。
</para>
<para>
- ���1�̕��@�Ƃ��āA<literal>Employee</literal> ���� <literal>Person</literal> �ւ�
- ���j�[�N�����g�����O���L�[�֘A�͈ȉ��̂悤�ɕ\������܂��F
+ もう1つの方法として、<literal>Employee</literal> から <literal>Person</literal> への
+ ユニーク制約を使った外部キー関連は以下のように表現されます:
</para>
<programlisting><![CDATA[<many-to-one name="person" class="Person" column="PERSON_ID" unique="true"/>]]></programlisting>
<para>
- �����Ă��̊֘A�́A
- �ȉ��̋L�q�� <literal>Person</literal> �̃}�b�s���O�ɒlj����邱�Ƃőo�����ɂ��邱�Ƃ��ł��܂��F
+ そしてこの関連は、
+ 以下の記述を <literal>Person</literal> のマッピングに追加することで双方向にすることができます:
</para>
<programlisting><![CDATA[<one-to-one name="employee" class="Employee" property-ref="person"/>]]></programlisting>
@@ -1930,29 +1931,29 @@
</natural-id>]]></programlisting>
<para>
- ��L�[�Ƃ��đ㗝�L�[�̎g�p�𐄏����܂����A
- ���ׂẴG���e�B�e�B�ɑ��Ď��R�L�[���ʂ���悤�ɂ��ׂ��ł��B
- ���R�L�[�̓��j�[�N����null�Ȉ�̃v���p�e�B�A�܂��̓v���p�e�B�̘A���ł��B
- �s�ςł������ɗǂ��ł��B
- <literal><natural-id></literal> �v�f��Ŏ��R�L�[�̃v���p�e�B��}�b�s���O���܂��B
- Hibernate�͕K�R�I�Ƀ��j�[�N����null�l�����鐧������A
- �������ă}�b�s���O�͂�莩�ȋL�q�I�ɂȂ�܂��B
+ 主キーとして代理キーの使用を推奨しますが、
+ すべてのエンティティに対して自然キーを識別するようにすべきです。
+ 自然キーはユニークかつ非nullな一つのプロパティ、またはプロパティの連結です。
+ 不変であればさらに良いです。
+ <literal><natural-id></literal> 要素内で自然キーのプロパティをマッピングします。
+ Hibernateは必然的にユニークかつnull値を許可する制約を生成し、
+ こうしてマッピングはより自己記述的になります。
</para>
<para>
- �G���e�B�e�B�̎��R�L�[�v���p�e�B�̔�r�ɂ́A
- <literal>equals()</literal> �� <literal>hashCode()</literal> �̎������������߂��܂��B
+ エンティティの自然キープロパティの比較には、
+ <literal>equals()</literal> と <literal>hashCode()</literal> の実装を強くお勧めします。
</para>
<para>
- ���̃}�b�s���O�͎��R��L�[��g�����G���e�B�e�B�ł̎g�p��Ӑ}���Ă��܂���B
+ このマッピングは自然主キーを使ったエンティティでの使用を意図していません。
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- <literal>mutable</literal> (�I�v�V����, �f�t�H���g�� <literal>false</literal> ):
- �f�t�H���g�ł́A���R���ʎq�v���p�e�B�͕s��(�萔)�Ƒz�肳��Ă��܂��B
+ <literal>mutable</literal> (オプション, デフォルトは <literal>false</literal> ):
+ デフォルトでは、自然識別子プロパティは不変(定数)と想定されています。
</para>
</listitem>
</itemizedlist>
@@ -1963,10 +1964,10 @@
<title>component, dynamic-component</title>
<para>
- <literal><component></literal> �v�f�́A
- �q�I�u�W�F�N�g�̃v���p�e�B��e�N���X�̃e�[�u���̃J�����փ}�b�s���O���܂��B
- �R���|�[�l���g�͎����̃v���p�e�B�A�R���|�[�l���g�A�R���N�V�����̏��ɒ�`�ł��܂��B
- �ȉ��́u�R���|�[�l���g�v���Ă��������B
+ <literal><component></literal> 要素は、
+ 子オブジェクトのプロパティを親クラスのテーブルのカラムへマッピングします。
+ コンポーネントは自分のプロパティ、コンポーネント、コレクションの順に定義できます。
+ 以下の「コンポーネント」を見てください。
</para>
<programlistingco>
@@ -1999,72 +2000,72 @@
<calloutlist>
<callout arearefs="component1">
<para>
- <literal>name</literal>�F�v���p�e�B���B
+ <literal>name</literal>:プロパティ名。
</para>
</callout>
<callout arearefs="component2">
<para>
<literal>class</literal>
- �i�I�v�V���� - �f�t�H���g�̓��t���N�V�����ɂ�茈�肳���v���p�e�B�̌^�j�F
- �R���|�[�l���g�i�q�j�N���X�̖��O�B
+ (オプション - デフォルトはリフレクションにより決定されるプロパティの型):
+ コンポーネント(子)クラスの名前。
</para>
</callout>
<callout arearefs="component3">
<para>
- <literal>insert</literal> �F�}�b�s���O���ꂽ�J������SQL��
- <literal>INSERT</literal> �Ɍ����悤�ɂ���ǂ�����w�肵�܂��B
+ <literal>insert</literal> :マッピングされたカラムがSQLの
+ <literal>INSERT</literal> に現れるようにするどうかを指定します。
</para>
</callout>
<callout arearefs="component4">
<para>
- <literal>update</literal> : �}�b�s���O���ꂽ�J������SQL ��
- <literal>UPDATE</literal> �Ɍ����悤�ɂ��邩�ǂ�����w�肵�܂��B
+ <literal>update</literal> : マッピングされたカラムがSQL の
+ <literal>UPDATE</literal> に現れるようにするかどうかを指定します。
</para>
</callout>
<callout arearefs="component5">
<para>
- <literal>access</literal> �i�I�v�V���� - �f�t�H���g�� <literal>property</literal> �j�F
- �v���p�e�B�̒l�ւ̃A�N�Z�X��Hibernate���g���헪�B
+ <literal>access</literal> (オプション - デフォルトは <literal>property</literal> ):
+ プロパティの値へのアクセスにHibernateが使う戦略。
</para>
</callout>
<callout arearefs="component6">
<para>
- <literal>lazy</literal> (optional - �f�t�H���g�� <literal>false</literal> ):
- �C���X�^���X�ϐ��ɍŏ��ɃA�N�Z�X�����Ƃ��ɁA
- �R���|�[�l���g��x�����ăt�F�b�`����悤�w�肵�܂��B
- (�o�C�g�R�[�h������쐬���鎞�Ԃ��K�v�ɂȂ�܂�)
+ <literal>lazy</literal> (optional - デフォルトは <literal>false</literal> ):
+ インスタンス変数に最初にアクセスしたときに、
+ コンポーネントを遅延してフェッチするよう指定します。
+ (バイトコード実装を作成する時間が必要になります)
</para>
</callout>
<callout arearefs="component7">
<para>
- <literal>optimistic-lock</literal> (�I�v�V���� - �f�t�H���g�� <literal>true</literal> ):
- ���̃v���p�e�B�̍X�V�ɁA�y�σ��b�N�̎擾��v�����邩�ǂ�����w�肵�܂��B
- ����������A���̃v���p�e�B���_�[�e�B�ł���Ƃ��Ƀo�[�W�����𑝂₷�ׂ������肵�܂��B
+ <literal>optimistic-lock</literal> (オプション - デフォルトは <literal>true</literal> ):
+ このプロパティの更新に、楽観ロックの取得を要求するかどうかを指定します。
+ 言い換えれば、このプロパティがダーティであるときにバージョンを増やすべきかを決定します。
</para>
</callout>
<callout arearefs="component8">
<para>
- <literal>unique</literal> (�I�v�V���� - �f�t�H���g�� <literal>false</literal> ):
- �R���|�[�l���g�̂��ׂẴ}�b�s���O����J�����ɁA���j�[�N�����݂��邩��w�肵�܂��B
+ <literal>unique</literal> (オプション - デフォルトは <literal>false</literal> ):
+ コンポーネントのすべてのマッピングするカラムに、ユニーク制約が存在するかを指定します。
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- �q�� <literal><property></literal> �^�O�ŁA
- �q�̃N���X�̃v���p�e�B��e�[�u���J�����Ƀ}�b�s���O���܂��B
+ 子の <literal><property></literal> タグで、
+ 子のクラスのプロパティをテーブルカラムにマッピングします。
</para>
<para>
- <literal><component></literal> �v�f�́A�e�G���e�B�e�B�֖߂�Q�ƂƂ��āA
- �R���|�[�l���g�̃N���X�̃v���p�e�B��}�b�s���O���� <literal><parent></literal> �T�u�v�f�����܂��B
+ <literal><component></literal> 要素は、親エンティティへ戻る参照として、
+ コンポーネントのクラスのプロパティをマッピングする <literal><parent></literal> サブ要素を許可します。
</para>
<para>
- <literal><dynamic-component></literal> �v�f�́A
- <literal>Map</literal> ���R���|�[�l���g�Ƃ��ă}�b�s���O����邱�Ƃ�\�ɂ��܂��B
- �v���p�e�B����map�̃L�[��Q�Ƃ��܂��B<xref linkend="components-dynamic"/> ��Q�Ƃ��Ă��������B
+ <literal><dynamic-component></literal> 要素は、
+ <literal>Map</literal> がコンポーネントとしてマッピングされることを可能にします。
+ プロパティ名はmapのキーを参照します。<xref linkend="components-dynamic"/> を参照してください。
</para>
@@ -2074,11 +2075,11 @@
<title>properties</title>
<para>
- <literal><properties></literal> �v�f�̓N���X�̃v���p�e�B�̎w�肳�ꂽ�A
- �_���I�ȃO���[�s���O��\�ɂ��܂��B
- ���̍\���̍ł�d�v�Ȏg�p���@�́A
- <literal>property-ref</literal> �̃^�[�Q�b�g�ɂȂ�v���p�e�B�̌��������邱�Ƃł��B
- ����͂܂��A�����J�����̃��j�[�N������`����ȒP�ȕ��@�ł����܂��B
+ <literal><properties></literal> 要素はクラスのプロパティの指定された、
+ 論理的なグルーピングを可能にします。
+ この構造の最も重要な使用方法は、
+ <literal>property-ref</literal> のターゲットになるプロパティの結合を許可することです。
+ それはまた、複数カラムのユニーク制約を定義する簡単な方法でもあります。
</para>
<programlistingco>
@@ -2104,40 +2105,40 @@
<calloutlist>
<callout arearefs="properties1">
<para>
- <literal>name</literal> : �O���[�s���O�̘_�����B
- ���ۂ̃v���p�e�B���ł� <emphasis>����܂���</emphasis> �B
+ <literal>name</literal> : グルーピングの論理名。
+ 実際のプロパティ名では <emphasis>ありません</emphasis> 。
</para>
</callout>
<callout arearefs="properties2">
<para>
- <literal>insert</literal>�F�}�b�s���O���ꂽ�J������SQL��
- <literal>INSERT</literal> �Ɍ����悤�ɂ��邩�ǂ�����w�肵�܂��B
+ <literal>insert</literal>:マッピングされたカラムがSQLの
+ <literal>INSERT</literal> に現れるようにするかどうかを指定します。
</para>
</callout>
<callout arearefs="properties3">
<para>
- <literal>update</literal>�F�}�b�s���O���ꂽ�J������SQL��
- <literal>UPDATE</literal> �Ɍ����悤�ɂ��邩�ǂ�����w�肵�܂��B
+ <literal>update</literal>:マッピングされたカラムがSQLの
+ <literal>UPDATE</literal> に現れるようにするかどうかを指定します。
</para>
</callout>
<callout arearefs="properties4">
<para>
- <literal>optimistic-lock</literal> (�I�v�V���� - �f�t�H���g�� <literal>true</literal> ):
- �����̃v���p�e�B�̍X�V�Ɋy�ϓI���b�N�̎擾��v�����邩�ǂ�����w�肵�܂��B
- ����������A���̃v���p�e�B���_�[�e�B�ł���Ƃ��Ƀo�[�W�����𑝂₷�ׂ������肵�܂��B
+ <literal>optimistic-lock</literal> (オプション - デフォルトは <literal>true</literal> ):
+ これらのプロパティの更新に楽観的ロックの取得を要求するかどうかを指定します。
+ 言い換えれば、このプロパティがダーティであるときにバージョンを増やすべきかを決定します。
</para>
</callout>
<callout arearefs="properties5">
<para>
- <literal>unique</literal> (�I�v�V���� - �f�t�H���g�� <literal>false</literal> ):
- �R���|�[�l���g�̂��ׂẴ}�b�s���O����J�����ɁA���j�[�N�����݂��邩��w�肵�܂��B
+ <literal>unique</literal> (オプション - デフォルトは <literal>false</literal> ):
+ コンポーネントのすべてのマッピングするカラムに、ユニーク制約が存在するかを指定します。
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- �Ⴆ�A����ȉ��̂悤�� <literal><properties></literal> �}�b�s���O���������ꍇ�F
+ 例えば、もし以下のような <literal><properties></literal> マッピングがあった場合:
</para>
<programlisting><![CDATA[<class name="Person">
@@ -2152,8 +2153,8 @@
</class>]]></programlisting>
<para>
- ��L�[�̑���� <literal>Person</literal> �e�[�u���̃��j�[�N�L�[�ւ̎Q�Ƃ��A
- ���K�V�[�f�[�^�̊֘A���������܂���B�F
+ 主キーの代わりに <literal>Person</literal> テーブルのユニークキーへの参照を持つ、
+ レガシーデータの関連を持つかもしれません。:
</para>
<programlisting><![CDATA[<many-to-one name="person"
@@ -2164,7 +2165,7 @@
</many-to-one>]]></programlisting>
<para>
- �������A���̂悤�ȃ��K�V�[�f�[�^�}�b�s���O�̃R���e�L�X�g�O�ւ̎g�p�͐������܂���B
+ しかし、このようなレガシーデータマッピングのコンテキスト外への使用は推奨しません。
</para>
</sect2>
@@ -2173,9 +2174,9 @@
<title>subclass</title>
<para>
- �Ō�Ƀ|�����[�t�B�b�N�ȉi�����ɂ́A���[�g�̉i���N���X�̊e�T�u�N���X�̒�`���K�v�ł��B
- table-per-class-hierarchy�}�b�s���O�헪�ł́A
- <literal><subclass></literal> ��`���g���܂��B
+ 最後にポリモーフィックな永続化には、ルートの永続クラスの各サブクラスの定義が必要です。
+ table-per-class-hierarchyマッピング戦略では、
+ <literal><subclass></literal> 定義が使われます。
</para>
<programlistingco>
@@ -2202,37 +2203,37 @@
<calloutlist>
<callout arearefs="subclass1">
<para>
- <literal>name</literal>�F�T�u�N���X�̊��S�C�����ꂽ�N���X���B
+ <literal>name</literal>:サブクラスの完全修飾されたクラス名。
</para>
</callout>
<callout arearefs="subclass2">
<para>
- <literal>discriminator-value</literal>�i�I�v�V���� - �f�t�H���g�̓N���X���j�F
- �X�̃T�u�N���X���ʂ��邽�߂̒l�B
+ <literal>discriminator-value</literal>(オプション - デフォルトはクラス名):
+ 個々のサブクラスを区別するための値。
</para>
</callout>
<callout arearefs="subclass3">
<para>
- <literal>proxy</literal>�i�I�v�V�����j�F
- �x���������v���L�V�Ɏg���N���X��C���^�[�t�F�C�X��w�肵�܂��B
+ <literal>proxy</literal>(オプション):
+ 遅延初期化プロキシに使うクラスやインターフェイスを指定します。
</para>
</callout>
<callout arearefs="subclass4">
<para>
- <literal>lazy</literal>�i�I�v�V����, �f�t�H���g�� <literal>true</literal> �j�F
- <literal>lazy="false"</literal> �Ɛݒ肷��ƁA�x���t�F�b�`���g�p�ł��܂���B
+ <literal>lazy</literal>(オプション, デフォルトは <literal>true</literal> ):
+ <literal>lazy="false"</literal> と設定すると、遅延フェッチが使用できません。
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- �e�T�u�N���X�ł́A�i���v���p�e�B�ƃT�u�N���X���`���܂��B
- <literal><version></literal> �� <literal><id></literal> �v���p�e�B�́A
- ���[�g�N���X����p�������Ɖ��肳��܂��B
- �K�w�\���ɂ�����T�u�N���X�́A
- ���j�[�N�� <literal>discriminator-value</literal> ���`���Ȃ���Ȃ�܂���B
- none���w�肳���ƁA���S�C�����ꂽJava�N���X�����g���܂��B
+ 各サブクラスでは、永続プロパティとサブクラスを定義します。
+ <literal><version></literal> と <literal><id></literal> プロパティは、
+ ルートクラスから継承されると仮定されます。
+ 階層構造におけるサブクラスは、
+ ユニークな <literal>discriminator-value</literal> を定義しなければなりません。
+ noneが指定されると、完全修飾されたJavaクラス名が使われます。
</para>
<!--
@@ -2246,15 +2247,15 @@
extends keyword. The ordering inside a single mapping file still needs to be defined as superclasses
before subclasses.
- <literal>subclass</literal> �A<literal>union-subclass</literal> �A
- <literal>joined-subclass</literal> �}�b�s���O��
- <literal>hibernate-mapping</literal> �����̕ʂ̃}�b�s���O�h�L�������g��Ő錾�ł��܂��B
- ����ɂ��A�V�����}�b�s���O�t�@�C����lj����邾���ŃN���X�K�w��g�����邱�Ƃ��ł��܂��B
- ���炩���߃}�b�s���O����X�[�p�[�N���X��w�肵���T�u�N���X�}�b�s���O��ŁA
- <literal>extends</literal> ������w�肵�Ȃ���Ȃ�܂���B
- ���ӁF���̓����̓}�b�s���O�h�L�������g�̏��ԕt�����d�v�ɂȂ�܂��B
- Hibernate3�ł́A�g���L�[���[�h��g���Ƃ��ɂ́A�}�b�s���O�t�@�C���̏����t���͖��ɂȂ�܂���B
- ��̃}�b�s���O�t�@�C����ł̏����t���͖����ɁA�T�u�N���X�̑O�ɃX�[�p�[�N���X�Ƃ��Ē�`����K�v������܂��B
+ <literal>subclass</literal> 、<literal>union-subclass</literal> 、
+ <literal>joined-subclass</literal> マッピングを
+ <literal>hibernate-mapping</literal> 直下の別のマッピングドキュメント内で宣言できます。
+ これにより、新しいマッピングファイルを追加するだけでクラス階層を拡張することができます。
+ あらかじめマッピングするスーパークラスを指定したサブクラスマッピング内で、
+ <literal>extends</literal> 属性を指定しなければなりません。
+ 注意:この特性はマッピングドキュメントの順番付けが重要になります。
+ Hibernate3では、拡張キーワードを使うときには、マッピングファイルの順序付けは問題になりません。
+ 一つのマッピングファイル内での順序付けは未だに、サブクラスの前にスーパークラスとして定義する必要があります。
</para>
@@ -2267,7 +2268,7 @@
-->
<para>
- �p���̃}�b�s���O�Ɋւ������ <xref linkend="inheritance"/> ���Ă��������B
+ 継承のマッピングに関する情報は <xref linkend="inheritance"/> を見てください。
</para>
</sect2>
@@ -2277,10 +2278,10 @@
<title>joined-subclass</title>
<para>
- ���1�̕��@�Ƃ��āA�e�T�u�N���X���g�̃e�[�u���փ}�b�s���O���邱�Ƃ��ł��܂�
- (table-per-subclass mapping strategy)�B
- �p��������Ԃ̓X�[�p�[�N���X�̃e�[�u����g���������Ō������܂��B
- <literal><joined-subclass></literal> �v�f��g�p���܂��B
+ もう1つの方法として、各サブクラスを自身のテーブルへマッピングすることができます
+ (table-per-subclass mapping strategy)。
+ 継承した状態はスーパークラスのテーブルを使った結合で検索します。
+ <literal><joined-subclass></literal> 要素を使用します。
</para>
<programlistingco>
@@ -2313,34 +2314,34 @@
<calloutlist>
<callout arearefs="joinedsubclass1">
<para>
- <literal>name</literal>�F�T�u�N���X�̊��S�C�����ꂽ�N���X���B
+ <literal>name</literal>:サブクラスの完全修飾されたクラス名。
</para>
</callout>
<callout arearefs="joinedsubclass2">
<para>
- <literal>table</literal> :�T�u�N���X�e�[�u���̖��O�B
+ <literal>table</literal> :サブクラステーブルの名前。
</para>
</callout>
<callout arearefs="joinedsubclass3">
<para>
- <literal>proxy</literal> (�I�v�V����):
- �x���������v���L�V�Ɏg�p����N���X��C���^�[�t�F�C�X��w�肵�܂��B
+ <literal>proxy</literal> (オプション):
+ 遅延初期化プロキシに使用するクラスやインターフェイスを指定します。
</para>
</callout>
<callout arearefs="joinedsubclass4">
<para>
- <literal>lazy</literal> (�I�v�V����, �f�t�H���g�� <literal>true</literal> ):
- <literal>lazy="false"</literal> �Ƃ���ƁA�x���t�F�b�`���g�p�ł��܂���B
+ <literal>lazy</literal> (オプション, デフォルトは <literal>true</literal> ):
+ <literal>lazy="false"</literal> とすると、遅延フェッチが使用できません。
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- ���̃}�b�s���O�헪�ɂ́A���ʃJ�����͕K�v����܂���B
- �������e�T�u�N���X�� <literal><key></literal> �v�f��g���A
- �I�u�W�F�N�g���ʎq��ێ�����e�[�u���J�������`���Ȃ���Ȃ�܂���B
- ���̏͂̏��߂̃}�b�s���O�͈ȉ��̂悤�ɏ��������܂��F
+ このマッピング戦略には、識別カラムは必要ありません。
+ しかし各サブクラスは <literal><key></literal> 要素を使い、
+ オブジェクト識別子を保持するテーブルカラムを定義しなければなりません。
+ この章の初めのマッピングは以下のように書き直せます:
</para>
<programlisting><![CDATA[<?xml version="1.0"?>
@@ -2370,13 +2371,13 @@
</class>
<class name="eg.Dog">
- <!-- ������Dog�̃}�b�s���O�����܂� -->
+ <!-- ここにDogのマッピングを書きます -->
</class>
</hibernate-mapping>]]></programlisting>
<para>
- �p���̃}�b�s���O�Ɋւ������ <xref linkend="inheritance"/> ���Ă��������B
+ 継承のマッピングに関する情報は <xref linkend="inheritance"/> を見てください。
</para>
</sect2>
@@ -2385,14 +2386,14 @@
<title>union-subclass</title>
<para>
- 3�ڂ̑I���́A�p���K�w�̋�ۃN���X�݂̂�e�[�u���Ƀ}�b�s���O���邱�Ƃł�
- (the table-per-concrete-class�헪)�B
- ���ꂼ��̃e�[�u���͌p���̏�Ԃ�܂߂��ׂẴN���X�̉i����Ԃ��`���܂��B
- Hibernate�ł͂��̗l�Ȍp���K�w���K������K�v�ł͂���܂���B
- �P���ɂ��ꂼ��̃N���X��A
- �ʁX�� <literal><class></literal> �錾��g���ă}�b�s���O���邱�Ƃ��ł��܂��B
- �������|�����[�t�B�b�N�Ȋ֘A(�Ⴆ�� �K�w�̃X�[�p�[�N���X�ւ̊֘A)��g�������Ȃ�A
- <literal><union-subclass></literal> �}�b�s���O��g���K�v������܂��B
+ 3つ目の選択肢は、継承階層の具象クラスのみをテーブルにマッピングすることです
+ (the table-per-concrete-class戦略)。
+ それぞれのテーブルは継承の状態を含めすべてのクラスの永続状態を定義します。
+ Hibernateではその様な継承階層が必ずしも必要ではありません。
+ 単純にそれぞれのクラスを、
+ 別々の <literal><class></literal> 宣言を使ってマッピングすることができます。
+ しかしポリモーフィックな関連(例えば 階層のスーパークラスへの関連)を使いたいなら、
+ <literal><union-subclass></literal> マッピングを使う必要があります。
</para>
@@ -2425,35 +2426,35 @@
<calloutlist>
<callout arearefs="unionsubclass1">
<para>
- <literal>name</literal>�F�T�u�N���X�̊��S�C�����ꂽ�N���X���B
+ <literal>name</literal>:サブクラスの完全修飾されたクラス名。
</para>
</callout>
<callout arearefs="unionsubclass2">
<para>
- <literal>table</literal> :�T�u�N���X�e�[�u���̖��O�B
+ <literal>table</literal> :サブクラステーブルの名前。
</para>
</callout>
<callout arearefs="unionsubclass3">
<para>
- <literal>proxy</literal> (�I�v�V����):
- �x���������v���L�V�Ɏg�p����N���X��C���^�[�t�F�C�X��w�肵�܂��B
+ <literal>proxy</literal> (オプション):
+ 遅延初期化プロキシに使用するクラスやインターフェイスを指定します。
</para>
</callout>
<callout arearefs="unionsubclass4">
<para>
- <literal>lazy</literal> (�I�v�V����, �f�t�H���g�� <literal>true</literal> ):
- <literal>lazy="false"</literal> �Ƃ���ƁA�x���t�F�b�`���g�p�ł��܂���B
+ <literal>lazy</literal> (オプション, デフォルトは <literal>true</literal> ):
+ <literal>lazy="false"</literal> とすると、遅延フェッチが使用できません。
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- ���̃}�b�s���O�헪�ł͎��ʃJ������L�[�J�����͕K�v����܂���B
+ このマッピング戦略では識別カラムやキーカラムは必要ありません。
</para>
<para>
- �p���̃}�b�s���O�Ɋւ������ <xref linkend="inheritance"/> ���Ă��������B
+ 継承のマッピングに関する情報は <xref linkend="inheritance"/> を見てください。
</para>
</sect2>
@@ -2462,8 +2463,8 @@
<title>join</title>
<para>
- <literal><join></literal> �v�f��g�����ƂŁA
- �P�̃N���X�̃v���p�e�B������̃e�[�u���Ƀ}�b�s���O���邱�Ƃ��ł��܂��B
+ <literal><join></literal> 要素を使うことで、
+ 1つのクラスのプロパティをいくつものテーブルにマッピングすることができます。
</para>
<programlistingco>
@@ -2492,58 +2493,58 @@
<calloutlist>
<callout arearefs="join1">
<para>
- <literal>table</literal> :���������e�[�u���̖��O
+ <literal>table</literal> :結合したテーブルの名前
</para>
</callout>
<callout arearefs="join2">
<para>
- <literal>schema</literal> (�I�v�V����):
- ���[�g�� <literal><hibernate-mapping></literal> �v�f�Ŏw�肵���X�L�[�}����
- �I�[�o�[���C�h���܂��B
+ <literal>schema</literal> (オプション):
+ ルートの <literal><hibernate-mapping></literal> 要素で指定したスキーマ名を
+ オーバーライドします。
</para>
</callout>
<callout arearefs="join3">
<para>
- <literal>catalog</literal> (�I�v�V����):
- ���[�g�� <literal><hibernate-mapping></literal> �v�f�Ŏw�肵���J�^���O����
- �I�[�o�[���C�h���܂��B
+ <literal>catalog</literal> (オプション):
+ ルートの <literal><hibernate-mapping></literal> 要素で指定したカタログ名を
+ オーバーライドします。
</para>
</callout>
<callout arearefs="join4">
<para>
- <literal>fetch</literal> (�I�v�V���� - �f�t�H���g�� <literal>join</literal> ):
- <literal>join</literal> ��ݒ肵���ꍇ�A
- Hibernate�̓f�t�H���g�ŁA�N���X��X�[�p�[�N���X�Œ�`���ꂽ <literal><join></literal>
- ��������̂ɓ��������g���A�T�u�N���X�Œ�`���ꂽ <literal><join></literal>
- ��������̂ɊO��������g���܂��B
- <literal>select</literal> ��ݒ肵���ꍇ�ɂ́A
- Hibernate�̓T�u�N���X�Œ�`���ꂽ <literal><join></literal>
- �̑I��ɏ����I���g���܂��B���̏ꍇ�A
- �s���T�u�N���X�̃C���X�^���X���\���邱�Ƃ��킩�����ꍇ�ɂ̂ݔ��s����܂��B
- ��������̓N���X�₻�̃X�[�p�[�N���X�Œ�`���ꂽ <literal><join></literal> ����
- ���邽�߂Ɏg�p���܂��B
+ <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> を検索
+ するために使用します。
</para>
</callout>
<callout arearefs="join5">
<para>
- <literal>inverse</literal> (�I�v�V���� - �f�t�H���g�� <literal>false</literal> ):
- ����\�ł���AHibernate�͂��̌����Œ�`����Ă���v���p�e�B�ɑ�
- �}����X�V��s���܂���B
+ <literal>inverse</literal> (オプション - デフォルトは <literal>false</literal> ):
+ もし可能であれば、Hibernateはこの結合で定義されているプロパティに対し
+ 挿入や更新を行いません。
</para>
</callout>
<callout arearefs="join6">
<para>
- <literal>optional</literal> (�I�v�V���� - �f�t�H���g�� <literal>false</literal> ):
- ����\�ł���AHibernate�͂��̌����Œ�`���ꂽ�v���p�e�B��null�łȂ��ꍇ�ɂ̂�
- �s��}�����A���̃v���p�e�B�̌����ɂ͏�ɊO��������g�p���܂��B
+ <literal>optional</literal> (オプション - デフォルトは <literal>false</literal> ):
+ もし可能であれば、Hibernateはこの結合で定義されたプロパティがnullでない場合にのみ
+ 行を挿入し、そのプロパティの検索には常に外部結合を使用します。
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- �Ⴆ�ΐl�̃A�h���X�̏��������e�[�u���Ƀ}�b�s���O���邱�Ƃ��\�ł�
- (���ׂẴv���p�e�B�ɑ��Ēl�^�̃Z�}���e�B�N�X��ێ����܂�)�B
+ 例えば人のアドレスの情報を分離したテーブルにマッピングすることが可能です
+ (すべてのプロパティに対して値型のセマンティクスを保持します)。
</para>
<programlisting><![CDATA[<class name="Person"
@@ -2560,9 +2561,9 @@
...]]></programlisting>
<para>
- ���̓����͂������K�V�[�f�[�^���f���ɑ��Ă̂ݗL�p�ł����A
- �N���X������Ȃ��e�[�u���ƁA���߂ׂ̍����h���C�����f���𐄏����܂��B
- ��������Ő������悤�ɁA�P�̃N���X�K�w�Ōp���̃}�b�s���O�헪���ւ��鎞�ɂ͗L�p�ł��B
+ この特徴はしばしばレガシーデータモデルに対してのみ有用ですが、
+ クラスよりも少ないテーブルと、きめの細かいドメインモデルを推奨します。
+ しかし後で説明するように、1つのクラス階層で継承のマッピング戦略を切り替える時には有用です。
</para>
</sect2>
@@ -2571,10 +2572,10 @@
<title>key</title>
<para>
- ���܂ʼn��x�� <literal><key></literal> �v�f���o�Ă��܂����B
- ���̗v�f�͐V�����e�[�u���ւ̌������`������A
- �����e�[�u���ŊO���L�[���`�����肷��e�v�f�̂ǂ��ɂł����A
- �I���W�i���e�[�u���̎�L�[��Q�Ƃ��܂��B
+ 今まで何度か <literal><key></literal> 要素が出てきました。
+ この要素は新しいテーブルへの結合を定義したり、
+ 結合テーブルで外部キーを定義したりする親要素のどこにでも現れ、
+ オリジナルテーブルの主キーを参照します。
</para>
<programlistingco>
@@ -2598,72 +2599,72 @@
<calloutlist>
<callout arearefs="key1">
<para>
- <literal>column</literal> (�I�v�V����):�O���L�[�J�����̖��O�B
- �l�X�g���� <literal><column></literal> �J�����ɂ���Ă�w�肳��܂��B
+ <literal>column</literal> (オプション):外部キーカラムの名前。
+ ネストした <literal><column></literal> カラムによっても指定されます。
</para>
</callout>
<callout arearefs="key2">
<para>
- <literal>on-delete</literal> (�I�v�V����, �f�t�H���g�� <literal>noaction</literal>):
- �O���L�[���f�[�^�x�[�X���x���ŃJ�X�P�[�h�폜���\���ǂ�����w�肵�܂��B
+ <literal>on-delete</literal> (オプション, デフォルトは <literal>noaction</literal>):
+ 外部キー制約がデータベースレベルでカスケード削除が可能かどうかを指定します。
</para>
</callout>
<callout arearefs="key3">
<para>
- <literal>property-ref</literal> (�I�v�V����):
- �I���W�i���e�[�u���̎�L�[�ł͂Ȃ��J������Q�Ƃ���O���L�[��w�肵�܂�
- (���K�V�[�f�[�^�ɑ��Ē���܂�)�B
+ <literal>property-ref</literal> (オプション):
+ オリジナルテーブルの主キーではないカラムを参照する外部キーを指定します
+ (レガシーデータに対して提供されます)。
</para>
</callout>
<callout arearefs="key4">
<para>
- <literal>not-null</literal> (�I�v�V����):
- �O���L�[�J������null�l���e���Ȃ����Ƃ�w�肵�܂�
- (���̂��Ƃ͊O���L�[����L�[�̈ꕔ�ł��邱�Ƃ�ÖٓI�Ɏ����܂�)�B
+ <literal>not-null</literal> (オプション):
+ 外部キーカラムがnull値を許容しないことを指定します
+ (このことは外部キーが主キーの一部であることを暗黙的に示します)。
</para>
</callout>
<callout arearefs="key5">
<para>
- <literal>update</literal> (�I�v�V����):
- �O���L�[�����čX�V���Ă͂Ȃ�Ȃ����Ƃ�w�肵�܂�
- (���̂��Ƃ͊O���L�[����L�[�̈ꕔ�ł��邱�Ƃ�ÖٓI�Ɏ����܂�)�B
+ <literal>update</literal> (オプション):
+ 外部キーを決して更新してはならないことを指定します
+ (このことは外部キーが主キーの一部であることを暗黙的に示します)。
</para>
</callout>
<callout arearefs="key6">
<para>
- <literal>unique</literal> (�I�v�V����):
- �O���L�[�����j�[�N������ׂ��ł��邱�Ƃ�w�肵�܂�
- (���̂��Ƃ͊O���L�[����L�[�̈ꕔ�ł��邱�Ƃ�ÖٓI�Ɏ����܂�)�B
+ <literal>unique</literal> (オプション):
+ 外部キーがユニーク制約を持つべきであることを指定します
+ (このことは外部キーが主キーの一部であることを暗黙的に示します)。
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- �폜�̃p�t�H�[�}���X���d�v�ł���V�X�e���ɂ́A
- ���ׂẴL�[�� <literal>on-delete="cascade"</literal> �ƒ�`���邱�Ƃ𐄏����܂��B
- �������邱�Ƃ�Hibernate�́A<literal>DELETE</literal> ���s�������ɁA
- �f�[�^�x�[�X���x���� <literal>ON CASCADE DELETE</literal> �����g�p���܂��B
- ���̓����̓o�[�W�����t����ꂽ�f�[�^�ɑ���Hibernate�̒ʏ�̊y�ϓI���b�N�헪��
- ��������Ƃ������Ƃɒ��ӂ��Ă��������B
+ 削除のパフォーマンスが重要であるシステムには、
+ すべてのキーを <literal>on-delete="cascade"</literal> と定義することを推奨します。
+ そうすることでHibernateは、<literal>DELETE</literal> 文を毎回発行する代わりに、
+ データベースレベルの <literal>ON CASCADE DELETE</literal> 制約を使用します。
+ この特徴はバージョン付けられたデータに対するHibernateの通常の楽観的ロック戦略を
+ 無視するということに注意してください。
</para>
<para>
- <literal>not-null</literal> �� <literal>update</literal> �����́A�P������Α��֘A�̎��ɂ͗L�p�ł��B
- �P������Α��֘A��null���e���Ȃ��O���L�[�Ƀ}�b�s���O����Ƃ��́A
- <literal><key not-null="true"></literal> ��g���ăL�[�J������錾
- <emphasis> ���Ȃ��Ă͂Ȃ�܂���</emphasis> �B
+ <literal>not-null</literal> と <literal>update</literal> 属性は、単方向一対多関連の時には有用です。
+ 単方向一対多関連をnullを許容しない外部キーにマッピングするときは、
+ <literal><key not-null="true"></literal> を使ってキーカラムを宣言
+ <emphasis> しなくてはなりません</emphasis> 。
</para>
</sect2>
<sect2 id="mapping-column" revision="4">
- <title>column �� formula �v�f</title>
+ <title>column と formula 要素</title>
<para>
- <literal>column</literal> ������L�q�ł���C�ӂ̃}�b�s���O�v�f�͂܂��A
- <literal><column></literal> �T�u�v�f��L�q�ł��܂��B
- ���l�� <literal><formula></literal> �� <literal>formula</literal> �����̑�֎�i�ł��B
+ <literal>column</literal> 属性を記述できる任意のマッピング要素はまた、
+ <literal><column></literal> サブ要素も記述できます。
+ 同様に <literal><formula></literal> も <literal>formula</literal> 属性の代替手段です。
</para>
<programlisting><![CDATA[<column
@@ -2682,9 +2683,9 @@
<programlisting><![CDATA[<formula>SQL expression</formula>]]></programlisting>
<para>
- �����v���p�e�B��֘A�̃}�b�s���O�̒��ŁA
- <literal>column</literal> �� <literal>formula</literal> ������g�ݍ��킹�邱�Ƃ��ł��܂��B
- �Ⴆ�A����Ȍ������Ȃǂł��B
+ 同じプロパティや関連のマッピングの中で、
+ <literal>column</literal> と <literal>formula</literal> 属性を組み合わせることができます。
+ 例えば、特殊な結合条件などです。
</para>
<programlisting><![CDATA[<many-to-one name="homeAddress" class="Address"
@@ -2699,11 +2700,11 @@
<title>import</title>
<para>
- �A�v���P�[�V�����ɓ������O��2�̉i���N���X������A
- Hibernate�N�G���Ŋ��S�C�����ꂽ�i�p�b�P�[�W�́j���O��w�肵�����Ȃ��Ɖ��肵�܂��B
- ���̂悤�ȏꍇ�� <literal>auto-import="true"</literal> �ɗ��炸�A
- �N���X���u�C���|�[�g�v���ꂽ��̂ł���Ɩ����ł��܂��B
- �����I�Ƀ}�b�s���O����Ă��Ȃ��N���X��C���^�[�t�F�C�X�ł�����C���|�[�g�ł��܂��B
+ アプリケーションに同じ名前の2つの永続クラスがあり、
+ Hibernateクエリで完全修飾された(パッケージの)名前を指定したくないと仮定します。
+ そのような場合は <literal>auto-import="true"</literal> に頼らず、
+ クラスが「インポート」されたものであると明示できます。
+ 明示的にマッピングされていないクラスやインターフェイスでさえもインポートできます。
</para>
<programlisting><![CDATA[<import class="java.lang.Object" rename="Universe"/>]]></programlisting>
@@ -2720,13 +2721,13 @@
<calloutlist>
<callout arearefs="import1">
<para>
- <literal>class</literal>�FJava�N���X�̊��S�C�����ꂽ�N���X���B
+ <literal>class</literal>:Javaクラスの完全修飾されたクラス名。
</para>
</callout>
<callout arearefs="import2">
<para>
- <literal>rename</literal>�i�I�v�V���� - �f�t�H���g�͏C������Ă��Ȃ��N���X���j�F
- �N�G������Ŏg���閼�O�B
+ <literal>rename</literal>(オプション - デフォルトは修飾されていないクラス名):
+ クエリ言語で使われる名前。
</para>
</callout>
</calloutlist>
@@ -2738,21 +2739,21 @@
<title>any</title>
<para>
- �v���p�e�B�}�b�s���O�ɂ͂���ɂ��1�̌^������܂��B
- <literal><any></literal> �}�b�s���O�v�f�́A
- �����̃e�[�u������N���X�ւ̃|�����[�t�B�b�N�Ȋ֘A���`���܂��B
- ���̌^�̃}�b�s���O�ɂ͕K�������̃J�������K�v�ł��B1�Ԗڂ̃J�����͊֘A�G���e�B�e�B�̌^��ێ����܂��B
- �c��̃J�����͎��ʎq��ێ����܂��B���̎�ނ̊֘A�ɂ͊O���L�[�����w�肷�邱�Ƃ͂ł��܂���B
- ���̂��߂���͍ł�g���邱�Ƃ̂Ȃ��i�|�����[�t�B�b�N�ȁj�֘A�̃}�b�s���O���@�ł��B
- ���ɓ��ʂȏꍇ�i�Ⴆ�A�������O��[�U�Z�b�V�����f�[�^�Ȃ�)�Ɍ����āA�����g���ׂ��ł��B
+ プロパティマッピングにはさらにもう1つの型があります。
+ <literal><any></literal> マッピング要素は、
+ 複数のテーブルからクラスへのポリモーフィックな関連を定義します。
+ この型のマッピングには必ず複数のカラムが必要です。1番目のカラムは関連エンティティの型を保持します。
+ 残りのカラムは識別子を保持します。この種類の関連には外部キー制約を指定することはできません。
+ そのためこれは最も使われることのない(ポリモーフィックな)関連のマッピング方法です。
+ 非常に特別な場合(例えば、検査ログやユーザセッションデータなど)に限って、これを使うべきです。
</para>
<para>
- <literal>meta-type</literal> �ɂ��A
- �A�v���P�[�V�����̓J�X�^���^��w��ł��܂��B���̃J�X�^���^��
- �f�[�^�x�[�X�J�����̒l��A<literal>id-type</literal> �Ŏw�肵���^��
- ���ʎq�v���p�e�B�������i���N���X�փ}�b�s���O���܂��B
- meta-type�̒l����N���X���ւ̃}�b�s���O��w�肵�Ȃ���Ȃ�܂���B
+ <literal>meta-type</literal> により、
+ アプリケーションはカスタム型を指定できます。このカスタム型は
+ データベースカラムの値を、<literal>id-type</literal> で指定した型の
+ 識別子プロパティを持った永続クラスへマッピングします。
+ meta-typeの値からクラス名へのマッピングを指定しなければなりません。
</para>
<programlisting><![CDATA[<any name="being" id-type="long" meta-type="string">
@@ -2790,37 +2791,37 @@
<calloutlist>
<callout arearefs="any1">
<para>
- <literal>name</literal>�F�v���p�e�B���B
+ <literal>name</literal>:プロパティ名。
</para>
</callout>
<callout arearefs="any2">
<para>
- <literal>id-type</literal>�F���ʎq�̌^�B
+ <literal>id-type</literal>:識別子の型。
</para>
</callout>
<callout arearefs="any3">
<para>
- <literal>meta-type</literal>�i�I�v�V���� - �f�t�H���g�� <literal>string</literal> �j�F
- �f�B�X�N���~�l�[�^�}�b�s���O�ŋ����ꂽ�^
+ <literal>meta-type</literal>(オプション - デフォルトは <literal>string</literal> ):
+ ディスクリミネータマッピングで許された型
</para>
</callout>
<callout arearefs="any4">
<para>
- <literal>cascade</literal>�i�I�v�V���� - �f�t�H���g�� <literal>none</literal> �j�F
- �J�X�P�[�h�̃X�^�C���B
+ <literal>cascade</literal>(オプション - デフォルトは <literal>none</literal> ):
+ カスケードのスタイル。
</para>
</callout>
<callout arearefs="any5">
<para>
- <literal>access</literal>�i�I�v�V���� - �f�t�H���g�� <literal>property</literal> �j�F
- �v���p�e�B�̒l�ւ̃A�N�Z�X��Hibernate���g���헪�B
+ <literal>access</literal>(オプション - デフォルトは <literal>property</literal> ):
+ プロパティの値へのアクセスにHibernateが使う戦略。
</para>
</callout>
<callout arearefs="any6">
<para>
- <literal>optimistic-lock</literal> (�I�v�V���� - �f�t�H���g�� <literal>true</literal> ):
- ���̃v���p�e�B�̍X�V�Ɋy�σ��b�N�̎擾��v�����邩�ǂ�����w�肵�܂��B
- ����������A���̃v���p�e�B���_�[�e�B�ł���Ƃ��Ƀo�[�W�����𑝂₷�ׂ������`���܂��B
+ <literal>optimistic-lock</literal> (オプション - デフォルトは <literal>true</literal> ):
+ このプロパティの更新に楽観ロックの取得を要求するかどうかを指定します。
+ 言い換えれば、このプロパティがダーティであるときにバージョンを増やすべきかを定義します。
</para>
</callout>
</calloutlist>
@@ -2831,87 +2832,87 @@
</sect1>
<sect1 id="mapping-types">
- <title>Hibernate�̌^</title>
+ <title>Hibernateの型</title>
<sect2 id="mapping-types-entitiesvalues" revision="1">
- <title>�G���e�B�e�B�ƒl</title>
+ <title>エンティティと値</title>
<para>
- �i���T�[�r�X�Ɋւ��l�X��Java���ꃌ�x���̃I�u�W�F�N�g�̐U�镑���𗝉��邽�߂ɂ́A
- �I�u�W�F�N�g��2�̃O���[�v�ɕ�����K�v������܂��F
+ 永続サービスに関わる様々なJava言語レベルのオブジェクトの振る舞いを理解するためには、
+ オブジェクトを2つのグループに分ける必要があります:
</para>
<para>
- <emphasis> �G���e�B�e�B</emphasis> �̓G���e�B�e�B�ւ̎Q�Ƃ�ێ�����A
- ���̂��ׂẴI�u�W�F�N�g����Ɨ����đ��݂��܂��B
- �Q�Ƃ���Ȃ��I�u�W�F�N�g���K�x�[�W�R���N�g����Ă��܂��������ʏ��Java���f���ƁA
- ������ׂĂ݂Ă��������B
- �i�e�G���e�B�e�B����q�ցA�Z�[�u�ƍ폜�� <emphasis>�J�X�P�[�h</emphasis> ���ꂤ�邱�Ƃ����āj
- �G���e�B�e�B�͖����I�ɃZ�[�u�܂��͍폜����Ȃ���Ȃ�܂���B
- ����͓��B�\���ɂ��I�u�W�F�N�g�i������ODMG���f���Ƃ͈قȂ��Ă��܂��B
- ��K�͂ȃV�X�e���ŃA�v���P�[�V�����I�u�W�F�N�g�����ʂǂ̂悤�Ɏg���邩�ɂ�薧�ڂɑΉ����܂��B
- �G���e�B�e�B�͏z�ƎQ�Ƃ̋��L��T�|�[�g���܂��B
- �܂������̓o�[�W�����t�����邱�Ƃ�ł��܂��B
+ <emphasis> エンティティ</emphasis> はエンティティへの参照を保持する、
+ 他のすべてのオブジェクトから独立して存在します。
+ 参照されないオブジェクトがガベージコレクトされてしまう性質を持つ通常のJavaモデルと、
+ これを比べてみてください。
+ (親エンティティから子へ、セーブと削除が <emphasis>カスケード</emphasis> されうることを除いて)
+ エンティティは明示的にセーブまたは削除されなければなりません。
+ これは到達可能性によるオブジェクト永続化のODMGモデルとは異なっています。
+ 大規模なシステムでアプリケーションオブジェクトが普通どのように使われるかにより密接に対応します。
+ エンティティは循環と参照の共有をサポートします。
+ またそれらはバージョン付けすることもできます。
</para>
<para>
- �G���e�B�e�B�̉i����Ԃ͑��̃G���e�B�e�B�� <emphasis>�l</emphasis> �^��
- �C���X�^���X�ւ̎Q�Ƃ���\������܂��B
- �l�̓v���~�e�B�u�A�R���N�V����(�R���N�V�����̓���ł͂Ȃ�)�A
- �R���|�[�l���g�A�s�σI�u�W�F�N�g�ł��B
- �G���e�B�e�B�Ƃ͈Ⴂ�A�l�́i���ɃR���N�V�����ƃR���|�[�l���g�ɂ����āj�A
- ���B�\���ɂ��i������폜�� <emphasis>�s���܂�</emphasis> �B
- �l�I�u�W�F�N�g�i�ƃv���~�e�B�u�j�́A��܂���G���e�B�e�B�ƈꏏ�ɉi������폜���s����̂ŁA
- ������Ɨ��Ƀo�[�W�����t�����邱�Ƃ͂ł��܂���B
- �l�ɂ͓Ɨ������A�C�f���e�B�e�B���Ȃ��̂ŁA
- �����̃G���e�B�e�B��R���N�V������������L���邱�Ƃ͂ł��܂���B
+ エンティティの永続状態は他のエンティティや <emphasis>値</emphasis> 型の
+ インスタンスへの参照から構成されます。
+ 値はプリミティブ、コレクション(コレクションの内部ではなく)、
+ コンポーネント、不変オブジェクトです。
+ エンティティとは違い、値は(特にコレクションとコンポーネントにおいて)、
+ 到達可能性による永続化や削除が <emphasis>行われます</emphasis> 。
+ 値オブジェクト(とプリミティブ)は、包含するエンティティと一緒に永続化や削除が行われるので、
+ それらを独立にバージョン付けすることはできません。
+ 値には独立したアイデンティティがないので、
+ 複数のエンティティやコレクションがこれを共有することはできません。
</para>
<para>
- ����܂Łu�i���N���X�v�Ƃ������t��G���e�B�e�B�̈Ӗ��Ŏg���Ă��܂����B
- ���ꂩ���������Ă����܂��B
- �����Ɍ����ƁA�i����Ԃ����[�U��`�̃N���X�̂��ׂĂ�
- �G���e�B�e�B�Ƃ����킯�ł͂���܂���B
- <emphasis>�R���|�[�l���g</emphasis> �͒l�̃Z�}���e�B�N�X�����[�U��`�N���X�ł��B
- <literal>java.lang.String</literal> �^�̃v���p�e�B��܂��l�̃Z�}���e�B�N�X�����܂��B
- ��`����Ȃ�AJDK�Œ���Ă��邷�ׂĂ�Java�̌^(�N���X)���l�̃Z�}���e�B�N�X���Ƃ����܂��B
- ������[�U��`�^�́A�G���e�B�e�B��l�^�̃Z�}���e�B�N�X�ƂƂ�Ƀ}�b�s���O�ł��܂��B
- ���̌���̓A�v���P�[�V�����J���Ҏ���ł��B
- ���̃N���X�̂P�̃C���X�^���X�ւ̋��L�Q�Ƃ́A
- �h���C�����f����̃G���e�B�e�B�N���X�ɑ���ǂ��q���g�ɂȂ�܂��B
- ��������W���W��́A�ʏ�l�^�֕ϊ�����܂��B
+ これまで「永続クラス」という言葉をエンティティの意味で使ってきました。
+ これからもそうしていきます。
+ 厳密に言うと、永続状態を持つユーザ定義のクラスのすべてが
+ エンティティというわけではありません。
+ <emphasis>コンポーネント</emphasis> は値のセマンティクスを持つユーザ定義クラスです。
+ <literal>java.lang.String</literal> 型のプロパティもまた値のセマンティクスを持ちます。
+ 定義するなら、JDKで提供されているすべてのJavaの型(クラス)が値のセマンティクスを持つといえます。
+ 一方ユーザ定義型は、エンティティや値型のセマンティクスとともにマッピングできます。
+ この決定はアプリケーション開発者次第です。
+ そのクラスの1つのインスタンスへの共有参照は、
+ ドメインモデル内のエンティティクラスに対する良いヒントになります。
+ 一方合成集約や集約は、通常値型へ変換されます。
</para>
<para>
- �{�h�L�������g��ʂ��āA���x����̊T�O����グ�܂��B
+ 本ドキュメントを通して、何度もこの概念を取り上げます。
</para>
<para>
- Java�^�̃V�X�e��(������͊J���҂���`�����G���e�B�e�B�ƒl�^)��
- SQL/�f�[�^�x�[�X�^�̃V�X�e���Ƀ}�b�s���O���邱�Ƃ͓���ł��B
- Hibernate�͂Q�̃V�X�e���̉˂�������܂��B
- �G���e�B�e�B�ɑ��Ă�
- <literal><class></literal> �� <literal><subclass></literal> �Ȃǂ�g�p���܂��B
- �l�^�ɑ��Ă� <literal><property></literal> ��
- <literal><component></literal> �Ȃǂ�A�ʏ� <literal>type</literal> �ƂƂ�Ɏg���܂��B
- ���̑����̒l��Hibernate�� <emphasis>�}�b�s���O�^</emphasis> �̖��O�ł��B
- Hibernate��(�W��JDK�̒l�^�ɑ���)�����̎��R�ȃ}�b�s���O����܂��B
- ��Ō���悤�ɁA���g�̃}�b�s���O�^��L�q���A���l�ɃJ�X�^���̕ϊ��헪��������邱�Ƃ��ł��܂��B
+ Java型のシステム(もしくは開発者が定義したエンティティと値型)を
+ SQL/データベース型のシステムにマッピングすることは難しいです。
+ Hibernateは2つのシステムの架け橋を提供します。
+ エンティティに対しては
+ <literal><class></literal> や <literal><subclass></literal> などを使用します。
+ 値型に対しては <literal><property></literal> や
+ <literal><component></literal> などを、通常 <literal>type</literal> とともに使います。
+ この属性の値はHibernateの <emphasis>マッピング型</emphasis> の名前です。
+ Hibernateは(標準JDKの値型に対して)多くの自由なマッピングを提供します。
+ 後で見るように、自身のマッピング型を記述し、同様にカスタムの変換戦略を実装することができます。
</para>
<para>
- �R���N�V���������g�ݍ��݂�Hibernate�̌^�͂��ׂāAnull�Z�}���e�B�N�X��T�|�[�g���܂��B
+ コレクションを除く組み込みのHibernateの型はすべて、nullセマンティクスをサポートします。
</para>
</sect2>
<sect2 id="mapping-types-basictypes" revision="3">
- <title>��{�I�Ȍ^</title>
+ <title>基本的な型</title>
<para>
- �g�ݍ��݂� <emphasis>��{�I�ȃ}�b�s���O�^</emphasis> �͑�܂��Ɉȉ��̂悤�ɕ������܂��B
+ 組み込みの <emphasis>基本的なマッピング型</emphasis> は大まかに以下のように分けられます。
<variablelist>
<varlistentry>
@@ -2919,11 +2920,11 @@
boolean, yes_no, true_false</literal></term>
<listitem>
<para>
- Java�̃v���~�e�B�u��b�p�[�N���X����K�ȁi�x���_�[�ŗL�́j
- SQL�J�����^�ւ̌^�}�b�s���O�B
- <literal>boolean, yes_no</literal> �� <literal>true_false</literal> �́A
- ���ׂ�Java�� <literal>boolean</literal>
- �܂��� <literal>java.lang.Boolean</literal> �̑�փG���R�[�h�ł��B
+ Javaのプリミティブやラッパークラスから適切な(ベンダー固有の)
+ SQLカラム型への型マッピング。
+ <literal>boolean, yes_no</literal> と <literal>true_false</literal> は、
+ すべてJavaの <literal>boolean</literal>
+ または <literal>java.lang.Boolean</literal> の代替エンコードです。
</para>
</listitem>
@@ -2932,8 +2933,8 @@
<term><literal>string</literal></term>
<listitem>
<para>
- <literal>java.lang.String</literal> ���� <literal>VARCHAR</literal>
- �i�܂���Oracle�� <literal>VARCHAR2</literal> �j�ւ̌^�}�b�s���O�B
+ <literal>java.lang.String</literal> から <literal>VARCHAR</literal>
+ (またはOracleの <literal>VARCHAR2</literal> )への型マッピング。
</para>
</listitem>
</varlistentry>
@@ -2941,9 +2942,9 @@
<term><literal>date, time, timestamp</literal></term>
<listitem>
<para>
- <literal>java.util.Date</literal> �Ƃ��̃T�u�N���X����SQL�^�� <literal>DATE</literal>,
- <literal>TIME</literal> , <literal>TIMESTAMP</literal> �i�܂��͂����Ɠ����Ȃ�́j
- �ւ̌^�}�b�s���O�B
+ <literal>java.util.Date</literal> とそのサブクラスからSQL型の <literal>DATE</literal>,
+ <literal>TIME</literal> , <literal>TIMESTAMP</literal> (またはそれらと等価なもの)
+ への型マッピング。
</para>
</listitem>
</varlistentry>
@@ -2951,8 +2952,8 @@
<term><literal>calendar, calendar_date</literal></term>
<listitem>
<para>
- <literal>java.util.Calendar</literal> ����SQL�^ �́u <literal>TIMESTAMP</literal> ,
- <literal>DATE</literal> (�܂��͂����Ɠ����Ȃ�́j�ւ̌^�}�b�s���O�B
+ <literal>java.util.Calendar</literal> からSQL型 の「 <literal>TIMESTAMP</literal> ,
+ <literal>DATE</literal> (またはそれらと等価なもの)への型マッピング。
</para>
</listitem>
</varlistentry>
@@ -2960,8 +2961,8 @@
<term><literal>big_decimal, big_integer</literal></term>
<listitem>
<para>
- <literal>java.math.BigDecimal</literal> �� <literal>java.math.BigInteger</literal>
- ���� <literal>NUMERIC</literal>�i�܂���Oracle�� <literal>NUMBER</literal> �j�ւ̌^�}�b�s���O�B
+ <literal>java.math.BigDecimal</literal> と <literal>java.math.BigInteger</literal>
+ から <literal>NUMERIC</literal>(またはOracleの <literal>NUMBER</literal> )への型マッピング。
</para>
</listitem>
</varlistentry>
@@ -2970,12 +2971,12 @@
<listitem>
<para>
<literal>java.util.Locale</literal> , <literal>java.util.TimeZone</literal> ,
- <literal>java.util.Currency</literal> ���� <literal>VARCHAR</literal>
- �i�܂���Oracle�� <literal>VARCHAR2</literal> �j�ւ̌^�}�b�s���O�B
- <literal>Locale</literal> �� <literal>Currency</literal> �̃C���X�^���X�́A
- ������ISO�R�[�h�Ƀ}�b�s���O����܂��B
- <literal>TimeZone</literal> �̃C���X�^���X�́A
- ������ <literal>ID</literal> �Ƀ}�b�s���O����܂��B
+ <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> にマッピングされます。
</para>
</listitem>
</varlistentry>
@@ -2983,9 +2984,9 @@
<term><literal>class</literal></term>
<listitem>
<para>
- <literal>java.lang.Class</literal> ���� <literal>VARCHAR</literal>
- �i�܂���Oracle�� <literal>VARCHAR2</literal> �j�ւ̌^�}�b�s���O�B
- <literal>Class</literal> �͂��̊��S�C�����ꂽ���O�Ƀ}�b�s���O����܂��B
+ <literal>java.lang.Class</literal> から <literal>VARCHAR</literal>
+ (またはOracleの <literal>VARCHAR2</literal> )への型マッピング。
+ <literal>Class</literal> はその完全修飾された名前にマッピングされます。
</para>
</listitem>
</varlistentry>
@@ -2993,7 +2994,7 @@
<term><literal>binary</literal></term>
<listitem>
<para>
- �o�C�g�z��́A�K��SQL�̃o�C�i���^�Ƀ}�b�s���O����܂��B
+ バイト配列は、適切なSQLのバイナリ型にマッピングされます。
</para>
</listitem>
</varlistentry>
@@ -3001,8 +3002,8 @@
<term><literal>text</literal></term>
<listitem>
<para>
- ����Java������́ASQL�� <literal>CLOB</literal> �܂���
- <literal>TEXT</literal> �^�Ƀ}�b�s���O����܂��B
+ 長いJava文字列は、SQLの <literal>CLOB</literal> または
+ <literal>TEXT</literal> 型にマッピングされます。
</para>
</listitem>
</varlistentry>
@@ -3010,10 +3011,10 @@
<term><literal>serializable</literal></term>
<listitem>
<para>
- �V���A���C�Y�\��Java�^�́A�K��SQL�̃o�C�i���^�Ƀ}�b�s���O����܂��B
- �f�t�H���g�Ŋ�{�^�ł͂Ȃ��V���A���C�Y�\��Java�N���X��
- �C���^�[�t�F�C�X�̖��O��w�肷�邱�ƂŁA
- Hibernate�̌^�� <literal>serializable</literal> �Ƃ��邱�Ƃ�ł��܂��B
+ シリアライズ可能なJava型は、適切なSQLのバイナリ型にマッピングされます。
+ デフォルトで基本型ではないシリアライズ可能なJavaクラスや
+ インターフェイスの名前を指定することで、
+ Hibernateの型を <literal>serializable</literal> とすることもできます。
</para>
</listitem>
</varlistentry>
@@ -3021,11 +3022,11 @@
<term><literal>clob, blob</literal></term>
<listitem>
<para>
- JDBC�N���X <literal>java.sql.Clob</literal> �� <literal>java.sql.Blob</literal>
- �ɑ���^�}�b�s���O�B
- blob��clob�I�u�W�F�N�g�̓g�����U�N�V�����̊O�ł͍ė��p�ł��Ȃ����߁A
- �A�v���P�[�V�����ɂ���Ă͕s�ւ������܂���B
- �i����ɂ̓h���C�o�T�|�[�g����т��Ă��܂���B�j
+ JDBCクラス <literal>java.sql.Clob</literal> と <literal>java.sql.Blob</literal>
+ に対する型マッピング。
+ blobやclobオブジェクトはトランザクションの外では再利用できないため、
+ アプリケーションによっては不便かもしれません。
+ (さらにはドライバサポートが一貫していません。)
</para>
</listitem>
</varlistentry>
@@ -3037,13 +3038,13 @@
</term>
<listitem>
<para>
- �قƂ�ǂ̏ꍇ�ɉςł���Java�̌^�ɑ���^�}�b�s���O�B
- Hibernate�͕s�ς�Java�̌^�ɑ��Ă͍œK����s���A
- �A�v���P�[�V�����͂����s�σI�u�W�F�N�g�Ƃ��Ĉ����܂��B
- �Ⴆ�� <literal>imm_timestamp</literal> �Ƃ��ă}�b�v�����C���X�^���X�ɑ��āA
- <literal>Date.setTime()</literal> ��Ăяo���Ă͂Ȃ�܂���B
- �v���p�e�B�̒l��ύX�����̕ύX��i�������邽�߂ɂ́A
- �A�v���P�[�V�����̓v���p�e�B�ɑ��ĐV����(����łȂ�)�I�u�W�F�N�g���蓖�ĂȂ���Ȃ�܂���B
+ ほとんどの場合に可変であるJavaの型に対する型マッピング。
+ Hibernateは不変なJavaの型に対しては最適化を行い、
+ アプリケーションはそれを不変オブジェクトとして扱います。
+ 例えば <literal>imm_timestamp</literal> としてマップしたインスタンスに対して、
+ <literal>Date.setTime()</literal> を呼び出してはなりません。
+ プロパティの値を変更しその変更を永続化するためには、
+ アプリケーションはプロパティに対して新しい(同一でない)オブジェクトを割り当てなければなりません。
</para>
</listitem>
</varlistentry>
@@ -3052,41 +3053,41 @@
</para>
<para>
- �G���e�B�e�B�ƃR���N�V�����̃��j�[�N�Ȏ��ʎq�́A<literal>binary</literal> , <literal>blob</literal> ,
- <literal>clob</literal> �����A�ǂ�Ȋ�{�^�ł�\���܂���B
- �i�������ʎq�ł�\���܂���B�ȉ����Ă��������B�j
+ エンティティとコレクションのユニークな識別子は、<literal>binary</literal> , <literal>blob</literal> ,
+ <literal>clob</literal> を除く、どんな基本型でも構いません。
+ (複合識別子でも構いません。以下を見てください。)
</para>
<para>
- ��{�I�Ȓl�^�ɂ́A<literal>org.hibernate.Hibernate</literal> �Œ�`���ꂽ
- <literal>Type</literal> �萔�����ꂼ�ꂠ��܂��B
- �Ⴆ�A<literal>Hibernate.STRING</literal> �� <literal>string</literal> �^��\�����Ă��܂��B
+ 基本的な値型には、<literal>org.hibernate.Hibernate</literal> で定義された
+ <literal>Type</literal> 定数がそれぞれあります。
+ 例えば、<literal>Hibernate.STRING</literal> は <literal>string</literal> 型を表現しています。
</para>
</sect2>
<sect2 id="mapping-types-custom" revision="2">
- <title>�J�X�^���^</title>
+ <title>カスタム型</title>
<para>
- �J���҂��Ǝ��̒l�^��쐬���邱�Ƃ́A��r�I�ȒP�ł��B
- �Ⴆ�A<literal>java.lang.BigInteger</literal> �^�̃v���p�e�B��
- <literal>VARCHAR</literal> �J�����ɉi�����������������܂���B
- Hibernate�͂��̂��߂̑g�ݍ��^��p�ӂ��Ă��܂���B
- �������J�X�^���^�́A�v���p�e�B�i�܂��̓R���N�V�����̗v�f�j��1�̃e�[�u���J������
- �}�b�s���O����̂ɐ����͂���܂���B
- ���̂��ߗႦ�A<literal>java.lang.String</literal> �^��
+ 開発者が独自の値型を作成することは、比較的簡単です。
+ 例えば、<literal>java.lang.BigInteger</literal> 型のプロパティを
+ <literal>VARCHAR</literal> カラムに永続化したいかもしれません。
+ Hibernateはこのための組み込み型を用意していません。
+ しかしカスタム型は、プロパティ(またはコレクションの要素)を1つのテーブルカラムに
+ マッピングするのに制限はありません。
+ そのため例えば、<literal>java.lang.String</literal> 型の
<literal>getName()</literal> / <literal>setName()</literal>
- Java�v���p�e�B�� <literal>FIRST_NAME</literal> , <literal>INITIAL</literal>, <literal>SURNAME</literal>
- �J�����ɉi�����ł��܂��B
+ Javaプロパティを <literal>FIRST_NAME</literal> , <literal>INITIAL</literal>, <literal>SURNAME</literal>
+ カラムに永続化できます。
</para>
<para>
- �J�X�^���^���������ɂ́A<literal>org.hibernate.UserType</literal> �܂���
- <literal>org.hibernate.CompositeUserType</literal> ��������A
- �^�̊��S�C�����ꂽ���O��g���ăv���p�e�B���`���܂��B
- �ǂ̂悤�Ȏ�ނ̂�̂��\���ׂ�ɂ́A
- <literal>org.hibernate.test.DoubleStringType</literal> ��m�F�����������B
+ カスタム型を実装するには、<literal>org.hibernate.UserType</literal> または
+ <literal>org.hibernate.CompositeUserType</literal> を実装し、
+ 型の完全修飾された名前を使ってプロパティを定義します。
+ どのような種類のものが可能かを調べるには、
+ <literal>org.hibernate.test.DoubleStringType</literal> を確認してください。
</para>
<programlisting><![CDATA[<property name="twoStrings" type="org.hibernate.test.DoubleStringType">
@@ -3095,22 +3096,22 @@
</property>]]></programlisting>
<para>
- <literal><column></literal> �^�O�ŁA
- �v���p�e�B���̃J�����փ}�b�s���O�ł��邱�Ƃɒ��ڂ��Ă��������B
+ <literal><column></literal> タグで、
+ プロパティを複数のカラムへマッピングできることに注目してください。
</para>
<para>
<literal>CompositeUserType</literal> , <literal>EnhancedUserType</literal> ,
<literal>UserCollectionType</literal> , <literal>UserVersionType</literal>
- �C���^�[�t�F�C�X�́A������Ȏg�p�@�ɑ��ẴT�|�[�g����܂��B
+ インターフェイスは、より特殊な使用法に対してのサポートを提供します。
</para>
<para>
- �}�b�s���O�t�@�C����� <literal>UserType</literal> �փp�����[�^��ł��܂��B
- ���̂��߂ɂ́A<literal>UserType</literal> ��
- <literal>org.hibernate.usertype.ParameterizedType</literal> ��������Ȃ��Ă͂Ȃ�܂���B
- �J�X�^���^�p�����[�^����邽�߂ɁA
- �}�b�s���O�t�@�C����� <literal><type></literal> �v�f��g�p�ł��܂��B
+ マッピングファイル内で <literal>UserType</literal> へパラメータを提供できます。
+ このためには、<literal>UserType</literal> は
+ <literal>org.hibernate.usertype.ParameterizedType</literal> を実装しなくてはなりません。
+ カスタム型パラメータを提供するために、
+ マッピングファイル内で <literal><type></literal> 要素を使用できます。
</para>
<programlisting><![CDATA[<property name="priority">
@@ -3120,17 +3121,17 @@
</property>]]></programlisting>
<para>
- <literal>UserType</literal> �́A
- �����Ƃ��ēn���ꂽ <literal>Properties</literal> �I�u�W�F�N�g����A
- <literal>default</literal> �Ŏw�肵���p�����[�^�ɑ���l�������邱�Ƃ��ł��܂��B
+ <literal>UserType</literal> は、
+ 引数として渡された <literal>Properties</literal> オブジェクトから、
+ <literal>default</literal> で指定したパラメータに対する値を検索することができます。
</para>
<para>
- ����� <literal>UserType</literal> ��p�ɂɎg�p����Ȃ�A�Z�����O���`����ƕ֗��ɂȂ�ł��傤�B
- <literal><typedef></literal> �v�f��g���Ă��̂悤�Ȃ��Ƃ��s���܂��B
- Typedefs�̓J�X�^���^�ɖ��O���蓖�Ă܂��B
- ���̌^���p�����[�^���Ȃ�A
- �p�����[�^�̃f�t�H���g�l�̃��X�g��܂ނ��Ƃ�ł��܂��B
+ 特定の <literal>UserType</literal> を頻繁に使用するならば、短い名前を定義すると便利になるでしょう。
+ <literal><typedef></literal> 要素を使ってこのようなことが行えます。
+ Typedefsはカスタム型に名前を割り当てます。
+ その型がパラメータを持つならば、
+ パラメータのデフォルト値のリストを含むこともできます。
</para>
<programlisting><![CDATA[<typedef class="com.mycompany.usertypes.DefaultValueIntegerType" name="default_zero">
@@ -3140,21 +3141,21 @@
<programlisting><![CDATA[<property name="priority" type="default_zero"/>]]></programlisting>
<para>
- �v���p�e�B�̃}�b�s���O�Ō^�p�����[�^��g�����ƂŁA
- typedef�Œ��ꂽ�p�����[�^���̓s�x�I�[�o�[���C�h���邱�Ƃ��\�ł��B
+ プロパティのマッピングで型パラメータを使うことで、
+ typedefで提供されたパラメータをその都度オーバーライドすることが可能です。
</para>
<para>
- Hibernate�̕��L���g�ݍ��^�ƃR���|�[�l���g�ɑ���T�|�[�g�́A
- �J�X�^���^��߂����� <emphasis>�g��Ȃ�</emphasis> �Ƃ������Ƃ�Ӗ����܂��B
- ����ł�Ȃ��A�A�v���P�[�V�����ŕp�o����(�G���e�B�e�B�ł͂Ȃ�)�N���X�ɑ���J�X�^���^�̎g�p�́A
- �悢�����ł���Ƃ݂Ȃ���܂��B
- �Ⴆ�� <literal>MonetaryAmount</literal> �N���X�̓R���|�[�l���g�Ƃ��ĊȒP�Ƀ}�b�s���O�ł��܂����A
- <literal>CompositeUserType</literal> �̗ǂ����ł��B
- �J�X�^���^��g�p���铮�@��1�͒��ۉ��ł��B
- �J�X�^���^��g�����ƂŁA�ʉ݂�ǂ̂悤�ɕ\�����悤�Ƃ�
- �}�b�s���O�h�L�������g�͋N���肤��ω��ɑΉ��ł��܂��B
+ Hibernateの幅広い組み込み型とコンポーネントに対するサポートは、
+ カスタム型をめったに <emphasis>使わない</emphasis> ということを意味します。
+ それでもなお、アプリケーションで頻出する(エンティティではない)クラスに対するカスタム型の使用は、
+ よいやり方であるとみなされます。
+ 例えば <literal>MonetaryAmount</literal> クラスはコンポーネントとして簡単にマッピングできますが、
+ <literal>CompositeUserType</literal> の良い候補です。
+ カスタム型を使用する動機の1つは抽象化です。
+ カスタム型を使うことで、通貨をどのように表現しようとも
+ マッピングドキュメントは起こりうる変化に対応できます。
</para>
</sect2>
@@ -3163,15 +3164,15 @@
<sect1 id="mapping-entityname">
- <title>�P�̃N���X�ɂP�ȏ�̃}�b�s���O</title>
+ <title>1つのクラスに1つ以上のマッピング</title>
<para>
- ����i���N���X�ɁA��ȏ�̃}�b�s���O����邱�Ƃ��o���܂��B
- ���̏ꍇ�A�}�b�s���O����Q�̃G���e�B�e�B�̃C���X�^���X�m�ɂ��邽�߂ɁA
- <emphasis>�G���e�B�e�B��</emphasis> ��w�肵�Ȃ���Ȃ�܂���
- (�f�t�H���g�ł̓G���e�B�e�B���̓N���X���Ɠ����ł��B)�B
- �i���I�u�W�F�N�g�����Ƃ��A�N�G���������ނƂ��A
- �w�肳�ꂽ�G���e�B�e�B�ւ̊֘A��}�b�s���O����Ƃ��ɂ́A
- Hibernate�ł̓G���e�B�e�B����w�肵�Ȃ���Ȃ�܂���B
+ ある永続クラスに、一つ以上のマッピングを提供することが出来ます。
+ この場合、マッピングする2つのエンティティのインスタンスを明確にするために、
+ <emphasis>エンティティ名</emphasis> を指定しなければなりません
+ (デフォルトではエンティティ名はクラス名と同じです。)。
+ 永続オブジェクトを扱うとき、クエリを書き込むとき、
+ 指定されたエンティティへの関連をマッピングするときには、
+ Hibernateではエンティティ名を指定しなければなりません。
</para>
<programlisting><![CDATA[<class name="Contract" table="Contracts"
@@ -3193,19 +3194,19 @@
</class>]]></programlisting>
<para>
- �֘A��<literal>class</literal> �̑���� <literal>entity-name</literal> ��g���āA
- �ǂ̂悤�Ɏw�肳���̂��ɒ��ڂ��Ă��������B
+ 関連が<literal>class</literal> の代わりに <literal>entity-name</literal> を使って、
+ どのように指定されるのかに注目してください。
</para>
</sect1>
<sect1 id="mapping-quotedidentifiers">
- <title>�o�b�N�N�H�[�g�ň͂� SQL ���ʎq</title>
+ <title>バッククォートで囲んだ SQL 識別子</title>
<para>
- �}�b�s���O�h�L�������g�Ńe�[�u����J�����̖��O��o�b�N�N�H�[�g�ň͂ނ��ƂŁA
- Hibernate�Ő������ꂽSQL���̎��ʎq����p�����邱�Ƃ��ł��܂��B
- Hibernate��SQL�� <literal>Dialect</literal> �ɑΉ�����A���������p�X�^�C����g���܂�
- �i���ʂ̓_�u���N�H�[�g�ł����ASQL Server�ł͂������ʁAMySQL�ł̓o�b�N�N�H�[�g�ł��j�B
+ マッピングドキュメントでテーブルやカラムの名前をバッククォートで囲むことで、
+ Hibernateで生成されたSQL中の識別子を引用させることができます。
+ HibernateはSQLの <literal>Dialect</literal> に対応する、正しい引用スタイルを使います
+ (普通はダブルクォートですが、SQL Serverではかぎ括弧、MySQLではバッククォートです)。
</para>
<programlisting><![CDATA[<class name="LineItem" table="`Line Item`">
@@ -3218,21 +3219,21 @@
<sect1 id="mapping-alternatives">
- <title>���^�f�[�^�̑�֎�i</title>
+ <title>メタデータの代替手段</title>
<para>
- XML�̋L�q�ȊO�ɁA
- Hibernate�ł�O/R�}�b�s���O�̃��^�f�[�^���`�����֕��@������܂��B
+ XMLの記述以外に、
+ HibernateではO/Rマッピングのメタデータを定義する代替方法があります。
</para>
<sect2 id="mapping-xdoclet">
- <title>XDoclet �}�[�N�A�b�v�̎g�p</title>
+ <title>XDoclet マークアップの使用</title>
<para>
- ������Hibernate���[�U��XDoclet�� <literal>@hibernate.tags</literal> ��g���āA
- �\�[�X�R�[�h��ɒ��ڃ}�b�s���O���ߍ��ނ��Ƃ�D�݂܂��B
- ����͌����Ɍ�����XDoclet�̕���Ȃ̂ŁA�{�h�L�������g�ł͂��̕��@��ΏۂƂ͂��܂���B
- ������XDoclet��g�����ȉ��� <literal>Cat</literal> �}�b�s���O�̗�����܂��B
+ 多くのHibernateユーザはXDocletの <literal>@hibernate.tags</literal> を使って、
+ ソースコード内に直接マッピング情報を埋め込むことを好みます。
+ これは厳密に言えばXDocletの分野なので、本ドキュメントではこの方法を対象とはしません。
+ しかしXDocletを使った以下の <literal>Cat</literal> マッピングの例を示します。
</para>
<programlisting><![CDATA[package eg;
@@ -3341,30 +3342,30 @@
}]]></programlisting>
<para>
- Hibernate�̃E�F�u�T�C�g�ɂ́AXDoclet��Hibernate�Ɋւ���T���v������������܂��B
+ Hibernateのウェブサイトには、XDocletとHibernateに関するサンプルが多数あります。
</para>
</sect2>
<sect2 id="mapping-annotations" revision="2">
- <title>JDK 5.0 �A�m�e�[�V�����̎g�p</title>
+ <title>JDK 5.0 アノテーションの使用</title>
<para>
- JDK5.0�ł̓^�C�v�Z�[�t���R���p�C�����Ƀ`�F�b�N�ł���A
- ���ꃌ�x����XDoclet�X�^�C���̃A�m�e�[�V���������܂����B
- ���̃��J�j�Y����XDoclet�̃A�m�e�[�V����������͂ŁA�c�[����IDE��������T�|�[�g���Ă��܂��B
- �Ⴆ��IntelliJ IDEA�́AJDK5.0�ɃA�m�e�[�V�����̎����⊮�ƍ\���̋����\����T�|�[�g���Ă��܂��B
- EJB�d�l (JSR-220)�̐V�����o�[�W�����ł́A�G���e�B�e�B�r�[���ɑ����v�ȃ��^�f�[�^���J�j�Y���Ƃ���
- JDK5.0�̃A�m�e�[�V������g�p���Ă��܂��B
- Hibernate3�ł�JSR-220 (�i����API)�� <literal>EntityManager</literal> ��������A
- ���^�f�[�^�}�b�s���O�ɑ���T�|�[�g�́A
- �ʃ_�E�����[�h�� <emphasis>Hibernate Annotations</emphasis> �p�b�P�[�W�ɂ�藘�p�\�ł��B
- �����EJB3(JSR-220)��Hibernate3�̃��^�f�[�^��ǂ����T�|�[�g���Ă��܂��B
+ 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のメタデータをどちらもサポートしています。
</para>
<para>
- �ȉ���EJB�̃G���e�B�e�B�r�[���Ƃ��Ē��߂��ꂽPOJO�N���X�̗�ł��B
+ 以下はEJBのエンティティビーンとして注釈されたPOJOクラスの例です。
</para>
<programlisting><![CDATA[@Entity(access = AccessType.FIELD)
@@ -3391,8 +3392,8 @@
}]]></programlisting>
<para>
- JDK5.0�̃A�m�e�[�V����(��JSR-220)�̃T�|�[�g�͐i�s���̍�Ƃł���A���S�ł͂Ȃ����Ƃɒ��ӂ��Ă��������B
- ����ɏڂ�������Hibernate�̃A�m�e�[�V�����E���W���[����Q�Ƃ��Ă��������B
+ JDK5.0のアノテーション(とJSR-220)のサポートは進行中の作業であり、完全ではないことに注意してください。
+ さらに詳しい情報はHibernateのアノテーション・モジュールを参照してください。
</para>
</sect2>
@@ -3401,54 +3402,54 @@
<sect1 id="mapping-generated" revision="1">
- <title>�����v���p�e�B</title>
+ <title>生成プロパティ</title>
<para>
- �����v���p�e�B�Ƃ́A�f�[�^�x�[�X�ɂ���Đ������ꂽ�l���v���p�e�B�ł��B
- �ʏ�AHibernate�A�v���P�[�V�����́A�f�[�^�x�[�X���l�������v���p�e�B��܂ރI�u�W�F�N�g��
- <literal>���t���b�V��</literal> ����K�v������܂����B
- �������A�v���p�e�B���������ꂽ�Ƃ������Ƃ�}�[�N���邱�ƂŁA
- �A�v���P�[�V�����̓��t���b�V���̐ӔC��Hibernate�ɈϏ����܂��B
+ 生成プロパティとは、データベースによって生成された値を持つプロパティです。
+ 通常、Hibernateアプリケーションは、データベースが値を生成したプロパティを含むオブジェクトを
+ <literal>リフレッシュ</literal> する必要がありました。
+ しかし、プロパティが生成されたということをマークすることで、
+ アプリケーションはリフレッシュの責任をHibernateに委譲します。
- ��{�I�ɁA�����v���p�e�B���ƒ�`�����G���e�B�e�B�ɑ���
- Hibernate��INSERT��UPDATE��SQL�s�����シ���ɁA
- �������ꂽ�l��ǂݍ��ނ��߂� SELECT SQL �����s����܂��B
+ 基本的に、生成プロパティを持つと定義したエンティティに対して
+ HibernateがINSERTやUPDATEのSQLを発行した後すぐに、
+ 生成された値を読み込むための SELECT SQL が発行されます。
</para>
<para>
- �����v���p�e�B�́A�}���s�\���X�V�s�\�łȂ���Ȃ�܂���B
- <xref linkend="mapping-declaration-version">versions</xref> �A
- <xref linkend="mapping-declaration-timestamp">timestamps</xref> �A
- <xref linkend="mapping-declaration-property">simple properties</xref> �������������ꂽ�ƃ}�[�N�ł��܂��B
+ 生成プロパティは、挿入不可能かつ更新不可能でなければなりません。
+ <xref linkend="mapping-declaration-version">versions</xref> 、
+ <xref linkend="mapping-declaration-timestamp">timestamps</xref> 、
+ <xref linkend="mapping-declaration-property">simple properties</xref> だけが生成されたとマークできます。
</para>
<para>
- <literal>never</literal> (�f�t�H���g) - �^����ꂽ�v���p�e�B�̒l�́A
- �f�[�^�x�[�X���琶������Ȃ����Ƃ�Ӗ����܂��B
+ <literal>never</literal> (デフォルト) - 与えられたプロパティの値は、
+ データベースから生成されないことを意味します。
</para>
<para>
- <literal>insert</literal> - �^����ꂽ�v���p�e�B�̒l�͑}�����ɐ�������邪�A
- �����ċN����X�V���ɂ͐�������Ȃ����Ǝ����܂��B
- �쐬���ꂽ���t�Ȃǂ́A���̃J�e�S���ɕ��ނ���܂��B
- <xref linkend="mapping-declaration-version">version</xref> ��
- <xref linkend="mapping-declaration-timestamp">timestamp</xref> ��
- �v���p�e�B�͐������ꂽ�ƃ}�[�N�ł��܂����A���̃I�v�V�����͗��p�ł��Ȃ����Ƃɒ��ӂ��Ă��������B
+ <literal>insert</literal> - 与えられたプロパティの値は挿入時に生成されるが、
+ 続いて起こる更新時には生成されないこと示します。
+ 作成された日付などは、このカテゴリに分類されます。
+ <xref linkend="mapping-declaration-version">version</xref> や
+ <xref linkend="mapping-declaration-timestamp">timestamp</xref> の
+ プロパティは生成されたとマークできますが、このオプションは利用できないことに注意してください。
</para>
<para>
- <literal>always</literal> - �}������X�V����v���p�e�B�̒l����������邱�Ƃ����܂��B
+ <literal>always</literal> - 挿入時も更新時もプロパティの値が生成されることを示します。
</para>
</sect1>
<sect1 id="mapping-database-object" revision="0">
- <title>�⏕�I�ȃf�[�^�x�[�X�E�I�u�W�F�N�g</title>
+ <title>補助的なデータベース・オブジェクト</title>
<para>
- Hibernate�̃X�L�[�}�E�G�{�����[�V�����c�[���ƘA�����邱�ƂŁA
- �C�ӂ̃f�[�^�x�[�X�E�I�u�W�F�N�g�i�g���K�[��X�g�A�h�v���V�[�W���Ȃǁj��CREATE��DROP�ɂ��A
- Hibernate�̃}�b�s���O�t�@�C����̃��[�U�E�X�L�[�}���ׂĒ�`���邱�Ƃ��o���܂��B
- ��Ƀg���K��X�g�A�h�v���V�[�W���̂悤�ȃf�[�^�x�[�X�E�I�u�W�F�N�g����폜���邱�Ƃ�Ӑ}���Ă��܂����A
- ���ۂɂ� <literal>java.sql.Statement.execute()</literal> ���\�b�h�ɂ���Ď��s�ł���
- �C�ӂ�SQL�R�}���h�iALTER�AINSERT�Ȃǁj�����s�ł��܂��B
- �⏕�I�ȃf�[�^�x�[�X�E�I�u�W�F�N�g���`���邽�߂́A2�̊�{�I�ȕ��@������܂��B
+ Hibernateのスキーマ・エボリューションツールと連動することで、
+ 任意のデータベース・オブジェクト(トリガーやストアドプロシージャなど)のCREATEとDROPにより、
+ Hibernateのマッピングファイル内のユーザ・スキーマをすべて定義することが出来ます。
+ 主にトリガやストアドプロシージャのようなデータベース・オブジェクトを生成や削除することを意図していますが、
+ 実際には <literal>java.sql.Statement.execute()</literal> メソッドによって実行できる
+ 任意のSQLコマンド(ALTER、INSERTなど)が実行できます。
+ 補助的なデータベース・オブジェクトを定義するための、2つの基本的な方法があります。
</para>
<para>
- 1�ڂ̕��@�́ACREATE��DROP�R�}���h��}�b�s���O�t�@�C���̊O�ɁA�����I�ɋL�ڂ��邱�Ƃł��B
+ 1つ目の方法は、CREATEとDROPコマンドをマッピングファイルの外に、明示的に記載することです。
</para>
<programlisting><![CDATA[<hibernate-mapping>
...
@@ -3458,9 +3459,9 @@
</database-object>
</hibernate-mapping>]]></programlisting>
<para>
- 2�ڂ̕��@�́ACREATE��DROP�R�}���h�̑g�ݗ��ĕ���m���Ă���J�X�^���N���X����邱�Ƃł��B
- ���̃J�X�^���N���X�� <literal>org.hibernate.mapping.AuxiliaryDatabaseObject</literal> �C���^�t�F�[�X��
- �������Ȃ���Ȃ�܂���B
+ 2つ目の方法は、CREATEとDROPコマンドの組み立て方を知っているカスタムクラスを提供することです。
+ このカスタムクラスは <literal>org.hibernate.mapping.AuxiliaryDatabaseObject</literal> インタフェースを
+ 実装しなければなりません。
</para>
<programlisting><![CDATA[<hibernate-mapping>
...
@@ -3469,8 +3470,8 @@
</database-object>
</hibernate-mapping>]]></programlisting>
<para>
- ����ɁA����f�[�^�x�[�X�������g�p����鎞�ɂ����K�p����Ƃ������悤�ɁA
- �f�[�^�x�[�X�E�I�u�W�F�N�g���g����P�[�X�����ł��܂��B
+ さらに、あるデータベース方言が使用される時にだけ適用するといったように、
+ データベース・オブジェクトが使われるケースを限定できます。
</para>
<programlisting><![CDATA[<hibernate-mapping>
...
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/batch.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/batch.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/batch.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,9 +1,11 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="batch">
- <title>�o�b�`����</title>
+ <title>バッチ処理</title>
<para>
- Hibernate��g���ăf�[�^�x�[�X��100,000�s��}������ȕ��@�́A���̂悤�Ȃ�̂ł��F
+ Hibernateを使ってデータベースに100,000行を挿入する愚直な方法は、このようなものです:
</para>
<programlisting><![CDATA[Session session = sessionFactory.openSession();
@@ -16,42 +18,42 @@
session.close();]]></programlisting>
<para>
- �����50,000�Ԗڂ̍s�̂������ <literal>OutOfMemoryException</literal> �Ŏ��s����ł��傤�B
- Hibernate���Z�b�V�������x���L���b�V���ŁA
- �V�����}�����ꂽ���ׂĂ� <literal>Customer</literal>
- �C���X�^���X��L���b�V�����邩��ł��B
+ これは50,000番目の行のあたりで <literal>OutOfMemoryException</literal> で失敗するでしょう。
+ Hibernateがセッションレベルキャッシュで、
+ 新しく挿入されたすべての <literal>Customer</literal>
+ インスタンスをキャッシュするからです。
</para>
<para>
- ���̏͂ł́A���̖���������@��Љ�܂��B
- �������o�b�`��������Ȃ�AJDBC�o�b�`���g�p�\�ł��邱�Ƃ����ɏd�v�ł��B
- �����łȂ���Ύ荠�ȃp�t�H�[�}���X�������܂���B
- JDBC�o�b�`�T�C�Y��荠�Ȑ��l�i�Ⴆ�A10����50�j�ɐݒ肵�Ă��������F
+ この章では、この問題を回避する方法を紹介します。
+ しかしバッチ処理をするなら、JDBCバッチが使用可能であることが非常に重要です。
+ そうでなければ手頃なパフォーマンスが得られません。
+ JDBCバッチサイズを手頃な数値(例えば、10から50)に設定してください:
</para>
<programlisting><![CDATA[hibernate.jdbc.batch_size 20]]></programlisting>
<para>
- �܂��L���b�V�����S�������Ȃ��v���Z�X�ŁA
- ���̂悤�ȍ�Ƃ������Ǝv���������܂���F
+ また二次キャッシュが全く効かないプロセスで、
+ このような作業をしたいと思うかもしれません:
</para>
<programlisting><![CDATA[hibernate.cache.use_second_level_cache false]]></programlisting>
<para>
- �������A����͐�ɕK�v�Ƃ����킯�ł͂���܂���B
- �Ȃ��Ȃ疾���I�� <literal>CacheMode</literal> ��ݒ肵�āA
- �L���b�V���Ƃ̑��ݍ�p���ɂ��邱�Ƃ��ł��邩��ł��B
+ しかし、これは絶対に必要というわけではありません。
+ なぜなら明示的に <literal>CacheMode</literal> を設定して、
+ 二次キャッシュとの相互作用を無効にすることができるからです。
</para>
<sect1 id="batch-inserts">
- <title>�o�b�`�}��</title>
+ <title>バッチ挿入</title>
<para>
- �V�����I�u�W�F�N�g��i��������Ƃ��A�ꎟ�L���b�V���̃T�C�Y�𐧌����邽�߁A
- �Z�b�V������ <literal>flush()</literal> ���� <literal>clear()</literal>
- ���Ȃ���Ȃ�܂���B
+ 新しいオブジェクトを永続化するとき、一次キャッシュのサイズを制限するため、
+ セッションを <literal>flush()</literal> して <literal>clear()</literal>
+ しなければなりません。
</para>
<programlisting><![CDATA[Session session = sessionFactory.openSession();
@@ -73,13 +75,13 @@
</sect1>
<sect1 id="batch-update" >
- <title>�o�b�`�X�V</title>
+ <title>バッチ更新</title>
<para>
- �f�[�^��������X�V�����肷��ɂ͓����A�C�f�B�A��K�p���܂��B
- ����ɉ����āA�f�[�^�̍s�𑽂��Ԃ��N�G���ɑ��ėL����
- �T�[�o�[�T�C�h�̃J�[�\���̗��_�����������
- <literal>scroll()</literal> ��g���K�v������܂��B
+ データを復元したり更新したりするには同じアイディアを適用します。
+ それに加えて、データの行を多く返すクエリに対して有効な
+ サーバーサイドのカーソルの利点を生かしたければ
+ <literal>scroll()</literal> を使う必要があります。
</para>
<programlisting><![CDATA[Session session = sessionFactory.openSession();
@@ -106,26 +108,26 @@
<sect1 id="batch-statelesssession">
<title>
- StatelessSession�C���^�[�t�F�C�X
+ StatelessSessionインターフェイス
</title>
<para>
- �܂��ʂ̕��@�Ƃ��āAHibernate�̓R�}���h�w����API��p�ӂ��Ă��܂��B
- ����͕����I�u�W�F�N�g�̌`�ŁA
- �f�[�^�x�[�X�Ƃ̃f�[�^�X�g���[���̂����Ɏg�����Ƃ��ł��܂��B
- <literal>StatelessSession</literal> �͊֘A����i���R���e�L�X�g�������A
- �����x���̃��C�t�T�C�N���Z�}���e�B�N�X�̑�������܂���B
- ���ɃX�e�[�g���X�Z�b�V�����́A�ꎞ�L���b�V������������A
- �܂��ǂ̂悤�ȓL���b�V����N�G���L���b�V���Ƃ���ݍ�p���܂���B
- �g�����U�N�V���i����write-behind�⎩���_�[�e�B�`�F�b�N��������܂���B
- �X�e�[�g���X�Z�b�V������g���čs���鑀�삪�A
- �֘A����C���X�^���X�փJ�X�P�[�h����邱�Ƃ͌����Ă���܂���B
- �R���N�V�����́A�X�e�[�g���X�Z�b�V��������͖�������܂��B
- �X�e�[�g���X�Z�b�V������ʂ��čs���鑀��́A
- Hibernate�̃C�x���g���f����C���^�[�Z�v�^�̉e����܂���B
- �ꎞ�L���b�V�������Ȃ����߁A
- �X�e�[�g���X�Z�b�V�����͕ʖ����f�[�^�ɏ�肭�Ώ��ł��܂���B
- �X�e�[�g���X�Z�b�V�����͒�x���̒��ۉ��ł���AJDBC�ɔ��ɂ悭���Ă��܂��B
+ また別の方法として、Hibernateはコマンド指向のAPIを用意しています。
+ これは分離オブジェクトの形で、
+ データベースとのデータストリームのやり取りに使うことができます。
+ <literal>StatelessSession</literal> は関連する永続コンテキストを持たず、
+ 高レベルのライフサイクルセマンティクスの多くを提供しません。
+ 特にステートレスセッションは、一時キャッシュを実装せず、
+ またどのような二次キャッシュやクエリキャッシュとも相互作用しません。
+ トランザクショナルなwrite-behindや自動ダーティチェックも実装しません。
+ ステートレスセッションを使って行われる操作が、
+ 関連するインスタンスへカスケードされることは決してありません。
+ コレクションは、ステートレスセッションからは無視されます。
+ ステートレスセッションを通して行われる操作は、
+ Hibernateのイベントモデルやインターセプタの影響を受けません。
+ 一時キャッシュを持たないため、
+ ステートレスセッションは別名を持つデータに上手く対処できません。
+ ステートレスセッションは低レベルの抽象化であり、JDBCに非常によく似ています。
</para>
@@ -144,20 +146,20 @@
session.close();]]></programlisting>
<para>
- ���̃R�[�h��ł́A�N�G�����Ԃ� <literal>Customer</literal>
- �C���X�^���X�͑����Ɂi�Z�b�V��������j��������邱�Ƃɒ��ӂ��Ă��������B
- ����́A�ǂ̂悤�ȉi���R���e�L�X�g�Ƃ�����Ċ֘A���܂���B
+ このコード例では、クエリが返す <literal>Customer</literal>
+ インスタンスは即座に(セッションから)分離されることに注意してください。
+ これは、どのような永続コンテキストとも決して関連しません。
</para>
<para>
- <literal>StatelessSession</literal> �C���^�[�t�F�C�X�Œ�`����Ă���
- <literal>insert(), update(), delete()</literal> �́A
- ��x���̒��ړI�ȃf�[�^�x�[�X����ƍl�����܂��B
- ���ʂƂ��āASQL�� <literal>INSERT, UPDATE, DELETE</literal> �����ꂼ�ꑦ���Ɏ��s����܂��B
- ���̂悤�ɁA������ <literal>Session</literal> �C���^�[�t�F�C�X�Œ�`����Ă���
+ <literal>StatelessSession</literal> インターフェイスで定義されている
+ <literal>insert(), update(), delete()</literal> は、
+ 低レベルの直接的なデータベース操作と考えられます。
+ 結果として、SQLの <literal>INSERT, UPDATE, DELETE</literal> がそれぞれ即座に実行されます。
+ このように、これらは <literal>Session</literal> インターフェイスで定義されている
<literal>save(), saveOrUpdate(), delete()</literal>
- �Ƃ͔��ɈقȂ�Ӗ������܂��B
+ とは非常に異なる意味を持ちます。
</para>
@@ -165,68 +167,68 @@
<sect1 id="batch-direct" revision="3">
<title>
- DML�X�^�C���̑���
+ DMLスタイルの操作
</title>
<para>
- ���łɋc�_�����悤�ɁA�����I�����ߓI�ȃI�u�W�F�N�g/�����[�V���i���}�b�s���O�́A
- �I�u�W�F�N�g�̏�Ԃ̊Ǘ��ł���ƍl�����܂��B
- ����̓�������̃I�u�W�F�N�g�̏�Ԃ𗘗p�ł���Ƃ������Ƃł��B
- ���̂��߁iSQL�� <literal>�f�[�^���쌾��</literal> (DML) ���F
+ すでに議論したように、自動的かつ透過的なオブジェクト/リレーショナルマッピングは、
+ オブジェクトの状態の管理であると考えられます。
+ これはメモリ内のオブジェクトの状態を利用できるということです。
+ そのため(SQLの <literal>データ操作言語</literal> (DML) 文:
<literal>INSERT</literal>, <literal>UPDATE</literal>, <literal>DELETE</literal>
- ��g���āj�f�[�^�x�[�X��̃f�[�^�ڑ��삵�Ă�A
- ��������̏�Ԃɂ͉e����^���܂���B
- ������Hibernate�́A�o���NSQL�X�^�C����DML�����s�ɑΉ����郁�\�b�h��p�ӂ��Ă��܂��B
- �����Hibernate�N�G������i<xref linkend="queryhql">HQL</xref>�j
- ��ʂ��Ď��s����܂��B
+ を使って)データベース内のデータを直接操作しても、
+ メモリ内の状態には影響を与えません。
+ しかしHibernateは、バルクSQLスタイルのDML文実行に対応するメソッドを用意しています。
+ これはHibernateクエリ言語(<xref linkend="queryhql">HQL</xref>)
+ を通して実行されます。
</para>
<para>
- <literal>UPDATE</literal> �� <literal>DELETE</literal> ���̋^���\���́F
- <literal>( UPDATE | DELETE ) FROM? �G���e�B�e�B�� (WHERE ����)?</literal> �ł��B
- ���ӂ��ׂ��_������������܂��F
+ <literal>UPDATE</literal> と <literal>DELETE</literal> 文の疑似構文は:
+ <literal>( UPDATE | DELETE ) FROM? エンティティ名 (WHERE 条件節)?</literal> です。
+ 注意すべき点がいくつかあります:
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- from�߂ɂ����āAFROM�L�[���[�h�̓I�v�V�����ł��B
+ from節において、FROMキーワードはオプションです。
</para>
</listitem>
<listitem>
<para>
- from�߂ł͒P��̃G���e�B�e�B���������\�ŁA
- �C�ӂŕʖ���t���邱�Ƃ��ł��܂��B
- �G���e�B�e�B���ɕʖ����^������ƁA�ǂ̂悤�ȃv���p�e�B�Q�Ƃ�A
- ���̕ʖ���g���ďC�����Ȃ���Ȃ�܂���B
- ����G���e�B�e�B���ɕʖ����^�����Ȃ���A
- �ǂ̂悤�ȃv���p�e�B�Q�Ƃ�C�����Ă͂Ȃ�܂���B
+ from節では単一のエンティティ名だけが可能で、
+ 任意で別名を付けることができます。
+ エンティティ名に別名が与えられると、どのようなプロパティ参照も、
+ その別名を使って修飾しなければなりません。
+ もしエンティティ名に別名が与えられなければ、
+ どのようなプロパティ参照も修飾してはなりません。
</para>
</listitem>
<listitem>
<para>
- �i�ÖٓI�ł��ꖾ���I�ł���j<xref linkend="queryhql-joins-forms">����</xref>
- ��o���NHQL�N�G����Ŏw�肷�邱�Ƃ͂ł��܂���B
- �T�u�N�G����where�߂Ŏg�����Ƃ��ł��܂�
- �T�u�N�G�����̂�̂́A������܂߂��܂��B
+ (暗黙的であれ明示的であれ)<xref linkend="queryhql-joins-forms">結合</xref>
+ をバルクHQLクエリ内で指定することはできません。
+ サブクエリはwhere節で使うことができます
+ サブクエリそのものは、結合を含められます。
</para>
</listitem>
<listitem>
<para>
- where�߂̓I�v�V�����ł��B
+ where節はオプションです。
</para>
</listitem>
</itemizedlist>
<para>
- ��Ƃ��āAHQL�� <literal>UPDATE</literal> ����s����ɂ́A
- <literal>Query.executeUpdate()</literal> ���\�b�h��g�����������B
- �i���̃��\�b�h�͂��Ȃ��݂�JDBC <literal>PreparedStatement.executeUpdate()</literal>
- ���疼�t�����܂����j�F
+ 例として、HQLの <literal>UPDATE</literal> を実行するには、
+ <literal>Query.executeUpdate()</literal> メソッドを使ってください。
+ (このメソッドはおなじみのJDBC <literal>PreparedStatement.executeUpdate()</literal>
+ から名付けられました):
d
</para>
@@ -243,16 +245,16 @@
session.close();]]></programlisting>
<para>
- HQL�� <literal>UPDATE</literal> ���́A�f�t�H���g�ł́A��p����G���e�B�e�B��
- <xref linkend="mapping-declaration-version">version</xref> ��
+ HQLの <literal>UPDATE</literal> 文は、デフォルトでは、作用するエンティティの
+ <xref linkend="mapping-declaration-version">version</xref> や
<xref linkend="mapping-declaration-timestamp">timestamp</xref>
- �v���p�e�B�̒l�ɂ͉e�����܂���B
- �����EJB3�̎d�l�ɂ�p����Ă��܂��B
- ������ <literal>versioned update</literal> ��g���āA
- <literal>version</literal> �� <literal>timestamp</literal>
- �v���p�e�B�̒l�����I�Ƀ��Z�b�g�����邱�Ƃ��ł��܂��B
- ����� <literal>UPDATE</literal> �L�[���[�h�̌�� <literal>VERSIONED</literal>
- �L�[���[�h��lj����邱�Ƃōs���܂��B
+ プロパティの値には影響しません。
+ これはEJB3の仕様にも受け継がれています。
+ しかし <literal>versioned update</literal> を使って、
+ <literal>version</literal> や <literal>timestamp</literal>
+ プロパティの値を強制的にリセットさせることができます。
+ これは <literal>UPDATE</literal> キーワードの後に <literal>VERSIONED</literal>
+ キーワードを追加することで行えます。
</para>
<programlisting><![CDATA[Session session = sessionFactory.openSession();
@@ -266,13 +268,13 @@
session.close();]]></programlisting>
<para>
- �J�X�^���o�[�W�����^�i<literal>org.hibernate.usertype.UserVersionType</literal>�j
- �� <literal>update versioned</literal> ���ƈꏏ�Ɏg���Ȃ����Ƃɒ��ӂ��Ă��������B
+ カスタムバージョン型(<literal>org.hibernate.usertype.UserVersionType</literal>)
+ は <literal>update versioned</literal> 文と一緒に使えないことに注意してください。
</para>
<para>
- HQL�� <literal>DELETE</literal> ����s����ɂ́A
- ���� <literal>Query.executeUpdate()</literal> ���\�b�h��g�����������F
+ HQLの <literal>DELETE</literal> を実行するには、
+ 同じ <literal>Query.executeUpdate()</literal> メソッドを使ってください:
</para>
@@ -288,87 +290,87 @@
session.close();]]></programlisting>
<para>
- <literal>Query.executeUpdate()</literal> ���\�b�h���Ԃ� <literal>int</literal>
- �̒l�́A���̑��삪�e����y�ڂ����G���e�B�e�B�̐��ł��B
- ���ꂪ�e������f�[�^�x�[�X��̍s���ƁA���݂ɊW���邩�ǂ�����l���Ă݂Ă��������B
- HQL�o���N����́A���ʂƂ��āA���ۂ�SQL�����������s����邱�ƂɂȂ�܂��B
- �Ⴆ��joined-subclass�ł��B
- �Ԃ���鐔�́A���̕��ɂ���ĉe�����ꂽ���ۂ̃G���e�B�e�B�̐������܂��B
- joined-subclass�̗�ɖ߂�ƁA�T�u�N���X�̈�ɑ���폜�́A
- ���̃T�u�N���X���}�b�s���O���ꂽ�e�[�u�������ł͂Ȃ��A
- �u���[�g�v�e�[�u���ƌp���K�w����ɉ�����joined-subclass�̃e�[�u���̍폜�ɂȂ�܂��B
+ <literal>Query.executeUpdate()</literal> メソッドが返す <literal>int</literal>
+ の値は、この操作が影響を及ぼしたエンティティの数です。
+ これが影響するデータベース内の行数と、相互に関係するかどうかを考えてみてください。
+ HQLバルク操作は、結果として、実際のSQL文が複数実行されることになります。
+ 例えばjoined-subclassです。
+ 返される数は、その文によって影響された実際のエンティティの数を示します。
+ joined-subclassの例に戻ると、サブクラスの一つに対する削除は、
+ そのサブクラスがマッピングされたテーブルだけではなく、
+ 「ルート」テーブルと継承階層をさらに下ったjoined-subclassのテーブルの削除になります。
</para>
<para>
- <literal>INSERT</literal> ���̋^���\���́F
- <literal>INSERT INTO �G���e�B�e�B�� �v���p�e�B���X�g select��</literal> �ł��B
- ���ӂ��ׂ��_������������܂��F
+ <literal>INSERT</literal> 文の疑似構文は:
+ <literal>INSERT INTO エンティティ名 プロパティリスト select文</literal> です。
+ 注意すべき点がいくつかあります:
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- INSERT INTO ... SELECT ... �̌`���������T�|�[�g����Ă��܂��B
- INSERT INTO ... VALUES ... �̌`���̓T�|�[�g����Ă��܂���B
+ INSERT INTO ... SELECT ... の形式だけがサポートされています。
+ INSERT INTO ... VALUES ... の形式はサポートされていません。
</para>
<para>
- �v���p�e�B���X�g�́ASQL�� <literal>INSERT</literal> ���ɂ����� <literal>�J�����̎d�l</literal>
- �ɗގ����Ă��܂��B
- �p���̃}�b�s���O�Ɋ܂܂��G���e�B�e�B�ɑ��āA
- �N���X���x���Œ��ڒ�`���ꂽ�v���p�e�B�������A�v���p�e�B���X�g�Ɏg���܂��B
- �X�[�p�[�N���X�̃v���p�e�B�͔F�߂�ꂸ�A�T�u�N���X�̃v���p�e�B�͌��ʂ�����܂���B
- ����������� <literal>INSERT</literal> ���́A�{���I�Ƀ|�����[�t�B�b�N�ł͂���܂���B
+ プロパティリストは、SQLの <literal>INSERT</literal> 文における <literal>カラムの仕様</literal>
+ に類似しています。
+ 継承のマッピングに含まれるエンティティに対して、
+ クラスレベルで直接定義されたプロパティだけが、プロパティリストに使えます。
+ スーパークラスのプロパティは認められず、サブクラスのプロパティは効果がありません。
+ 言い換えると <literal>INSERT</literal> 文は、本質的にポリモーフィックではありません。
</para>
</listitem>
<listitem>
<para>
- select���̕Ԃ�l�̌^��insert�������҂���^�ƃ}�b�`���Ă���A
- ����select���͑Ó���HQL select�N�G���ƂȂ肦�܂��B
- ���݂��̃`�F�b�N��f�[�^�x�[�X�֔C����̂ł͂Ȃ��A�N�G���̃R���p�C�����Ƀ`�F�b�N���܂��B
- ���̂��Ƃ́A<emphasis>equal</emphasis>�Ƃ͈Ⴂ�A
- Hibernate�� <literal>Type</literal> �Ԃ� <emphasis>equivalent</emphasis> �Ɋւ���
- ��������N�������Ƃɒ��ӂ��Ă��������B
- ����� <literal>org.hibernate.type.DataType</literal> �Ƃ��Ē�`���ꂽ�v���p�e�B�ƁA
+ 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>
- �Ƃ��Ē�`���ꂽ�v���p�e�B�̊Ԃ̃~�X�}�b�`�̖�������N�����܂��B
- �f�[�^�x�[�X���������ʂł��Ȃ��Ă�A�ϊ����邱�Ƃ��ł��Ă�A���̖��͔������܂��B
+ として定義されたプロパティの間のミスマッチの問題を引き起こします。
+ データベースがそれらを区別できなくても、変換することができても、この問題は発生します。
</para>
</listitem>
<listitem>
<para>
- id�v���p�e�B�ɑ��āAinsert���ɂ͓�̑I��������܂��B
- �v���p�e�B���X�g�Ŗ����I��id�v���p�e�B��w�肷�邩
- �i���̏ꍇ�A�Ή�����select������l������܂��j�A
- �v���p�e�B���X�g���珜�O���邩
- �i���̏ꍇ�A���������l���g���܂��j�̂����ꂩ�ł��B
- ��҂̑I���́A�f�[�^�x�[�X��𑀍삷��id�W�F�l���[�^��g���Ƃ��̂݁A���p�\�ł��B
- ���̑I����̂�ꍇ�A�u�C���������v�^�̃W�F�l���[�^��g���ƁA�\����͎��ɗ�O���������܂��B
- ���̋c�_�ł́A�C���f�[�^�x�[�X�^�W�F�l���[�^�� <literal>org.hibernate.id.SequenceGenerator</literal>
- �i�Ƃ��̃T�u�N���X�j�ƁA<literal>org.hibernate.id.PostInsertIdentifierGenerator</literal>
- �̎����ł���ƍl���Ă��܂��B
- �����ōł���ӂ��ׂ���O�́A<literal>org.hibernate.id.TableHiLoGenerator</literal> �ł��B
- �l��擾����I��\�ȕ��@���Ȃ����߁A���̃W�F�l���[�^��g�����Ƃ͂ł��܂���B
+ idプロパティに対して、insert文には二つの選択肢があります。
+ プロパティリストで明示的にidプロパティを指定するか
+ (この場合、対応するselect式から値が取られます)、
+ プロパティリストから除外するか
+ (この場合、生成される値が使われます)のいずれかです。
+ 後者の選択肢は、データベース内を操作するidジェネレータを使うときのみ、利用可能です。
+ この選択肢を採る場合、「インメモリ」型のジェネレータを使うと、構文解析時に例外が発生します。
+ この議論では、インデータベース型ジェネレータは <literal>org.hibernate.id.SequenceGenerator</literal>
+ (とそのサブクラス)と、<literal>org.hibernate.id.PostInsertIdentifierGenerator</literal>
+ の実装であると考えています。
+ ここで最も注意すべき例外は、<literal>org.hibernate.id.TableHiLoGenerator</literal> です。
+ 値を取得する選択可能な方法がないため、このジェネレータを使うことはできません。
</para>
</listitem>
<listitem>
<para>
- <literal>version</literal> �� <literal>timestamp</literal> �Ƃ��ă}�b�s���O�����v���p�e�B�ɑ��āA
- insert���ɂ͓�̑I��������܂��B
- �v���p�e�B���X�g�Ŗ����I�Ƀv���p�e�B��w�肷�邩
- �i���̏ꍇ�A�Ή�����select������l������܂��j�A
- �v���p�e�B���X�g���珜�O���邩
- �i���̏ꍇ�A<literal>org.hibernate.type.VersionType</literal> �Œ�`���ꂽ
- <literal>�V�[�h�l</literal> ���g���܂��j�̂����ꂩ�ł��B
+ <literal>version</literal> や <literal>timestamp</literal> としてマッピングされるプロパティに対して、
+ insert文には二つの選択肢があります。
+ プロパティリストで明示的にプロパティを指定するか
+ (この場合、対応するselect式から値が取られます)、
+ プロパティリストから除外するか
+ (この場合、<literal>org.hibernate.type.VersionType</literal> で定義された
+ <literal>シード値</literal> が使われます)のいずれかです。
</para>
</listitem>
</itemizedlist>
<para>
- HQL�� <literal>INSERT</literal> ���̎��s��ł��F
+ HQLの <literal>INSERT</literal> 文の実行例です:
</para>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/best_practices.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/best_practices.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/best_practices.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,246 +1,248 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="best-practices" revision="3">
- <title>�x�X�g�v���N�e�B�X</title>
+ <title>ベストプラクティス</title>
<variablelist spacing="compact">
<varlistentry>
<term>
- �N���X�ׂ͍������x�ŏ��� <literal><component></literal> �Ń}�b�s���O���܂��傤�B</term>
+ クラスは細かい粒度で書き <literal><component></literal> でマッピングしましょう。</term>
<listitem>
<para>
- <literal>street</literal>�i�ʂ�j, <literal>suburb</literal>
- �i�s�s�j, <literal>state</literal>�i�B�j, <literal>postcode</literal>
- �i�X�֔ԍ��j��J�v�Z�������� <literal>Address</literal>�i�Z���j�N���X��g���܂��傤�B
- ��������R�[�h���ė��p���₷���Ȃ�A���t�@�N�^�����O��ȒP�ɂȂ�܂��B
+ <literal>street</literal>(通り), <literal>suburb</literal>
+ (都市), <literal>state</literal>(州), <literal>postcode</literal>
+ (郵便番号)をカプセル化する <literal>Address</literal>(住所)クラスを使いましょう。
+ そうすればコードが再利用しやすくなり、リファクタリングも簡単になります。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
- �i���N���X�ɂ͎��ʎq�v���p�e�B���`���܂��傤�B</term>
+ 永続クラスには識別子プロパティを定義しましょう。</term>
<listitem>
<para>
- Hibernate�ł͎��ʎq�v���p�e�B�̓I�v�V�����ł����A
- �g�p���ׂ����R����������܂��B
- ���ʎq�́u�l�H�I�v�i�������ꂽ�A�Ɩ��I�ȈӖ������Ȃ��j
- �Ȃ�̂ɂ��邱�Ƃ������߂��܂��B
+ Hibernateでは識別子プロパティはオプションですが、
+ 使用すべき理由がたくさんあります。
+ 識別子は「人工的」(生成された、業務的な意味を持たない)
+ なものにすることをおすすめします。
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>���R�L�[�����܂��傤�B</term>
+ <term>自然キーを見つけましょう。</term>
<listitem>
<para>
- ���ׂẴG���e�B�e�B�ɑ��Ď��R�L�[�����āA
- <literal><natural-id></literal> �Ń}�b�s���O���܂��傤�B
- ���R�L�[��\������v���p�e�B���r���邽�߂ɁA
- <literal>equals()</literal> �� <literal>hashCode()</literal> ��������܂��傤�B
+ すべてのエンティティに対して自然キーを見つけて、
+ <literal><natural-id></literal> でマッピングしましょう。
+ 自然キーを構成するプロパティを比較するために、
+ <literal>equals()</literal> と <literal>hashCode()</literal> を実装しましょう。
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>�N���X�̃}�b�s���O�͂��ꂼ��̃N���X��p�̃t�@�C���ɏ����܂��傤�B</term>
+ <term>クラスのマッピングはそれぞれのクラス専用のファイルに書きましょう。</term>
<listitem>
<para>
- �P��̋���ȃ}�b�s���O�h�L�������g��g�p���Ȃ��ł��������B
- <literal>com.eg.Foo</literal> �N���X�Ȃ�
- <literal>com/eg/Foo.hbm.xml</literal> �t�@�C���Ƀ}�b�s���O���܂��傤�B
- ���̂��Ƃ́A���Ƀ`�[���ł̊J���ɈӖ�������܂��B
+ 単一の巨大なマッピングドキュメントを使用しないでください。
+ <literal>com.eg.Foo</literal> クラスなら
+ <literal>com/eg/Foo.hbm.xml</literal> ファイルにマッピングしましょう。
+ このことは、特にチームでの開発に意味があります。
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>���\�[�X�Ƃ��ă}�b�s���O���[�h���܂��傤�B</term>
+ <term>リソースとしてマッピングをロードしましょう。</term>
<listitem>
<para>
- �}�b�s���O��A����炪�}�b�s���O���邷��N���X�ƈꏏ�ɔz�u���܂��傤�B
+ マッピングを、それらがマッピングするするクラスと一緒に配置しましょう。
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>�N�G���������O���ɒu�����Ƃ�l���܂��傤</term>
+ <term>クエリ文字列を外部に置くことを考えましょう</term>
<listitem>
<para>
- �N�G����ANSI�W���łȂ�SQL����Ă�ł���Ȃ�A����͂悢�v���N�e�B�X�ł��B
- �N�G���������}�b�s���O�t�@�C���֊O�o������A�v���P�[�V�������|�[�^�u���ɂȂ�܂��B
+ クエリがANSI標準でないSQL関数を呼んでいるなら、これはよいプラクティスです。
+ クエリ文字列をマッピングファイルへ外出しすればアプリケーションがポータブルになります。
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>�o�C���h�ϐ���g���܂��傤�B</term>
+ <term>バインド変数を使いましょう。</term>
<listitem>
<para>
- JDBC�̏ꍇ�Ɠ����悤�ɁA�萔�łȂ��l�͕K��"?"�Œu�������܂��傤�B
- �萔�łȂ��l��o�C���h���邽�߂ɁA�N�G���ŕ������g���Ă͂����܂���B
- ���O�t���̃p�����[�^��g���悤�ɂ���Ƃ���ɗǂ��ł��B
+ JDBCの場合と同じように、定数でない値は必ず"?"で置き換えましょう。
+ 定数でない値をバインドするために、クエリで文字列操作を使ってはいけません。
+ 名前付きのパラメータを使うようにするとさらに良いです。
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>JDBC�R�l�N�V������Ǘ����Ă͂����܂���B</term>
+ <term>JDBCコネクションを管理してはいけません。</term>
<listitem>
<para>
- Hibernate�ł̓A�v���P�[�V������JDBC�R�l�N�V������Ǘ����邱�Ƃ�������Ă��܂��B
- ����������͍ŏI��i���Ǝv���Ă��������B
- �g�ݍ��݂̃R�l�N�V�����v���o�C�_��g�����Ƃ��ł��Ȃ���A
- <literal>org.hibernate.connection.ConnectionProvider</literal> ��������邱�Ƃ�l���Ă��������B
+ HibernateではアプリケーションがJDBCコネクションを管理することが許されています。
+ しかしこれは最終手段だと思ってください。
+ 組み込みのコネクションプロバイダを使うことができなければ、
+ <literal>org.hibernate.connection.ConnectionProvider</literal> を実装することを考えてください。
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>�J�X�^���^�̎g�p��l���܂��傤�B</term>
+ <term>カスタム型の使用を考えましょう。</term>
<listitem>
<para>
- ���郉�C�u�������玝���Ă���Java�^��i��������K�v������Ƃ��܂��傤�B
- ���������̌^�ɂ́A�R���|�[�l���g�Ƃ��ă}�b�s���O���邽�߂ɕK�v�ȃA�N�Z�T���Ȃ��Ƃ��܂��B
- ���̂悤�ȏꍇ�� <literal>org.hibernate.UserType</literal> �̎�����l����ׂ��ł��B
- ���������Hibernate�^�Ƃ̎����ϊ���S�z�����ɃA�v���P�[�V�����̃R�[�h�����܂��B
+ あるライブラリから持ってきたJava型を永続化する必要があるとしましょう。
+ しかしその型には、コンポーネントとしてマッピングするために必要なアクセサがないとします。
+ このような場合は <literal>org.hibernate.UserType</literal> の実装を考えるべきです。
+ そうすればHibernate型との実装変換を心配せずにアプリケーションのコードを扱えます。
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>�{�g���l�b�N��������ɂ�JDBC��n���h�R�[�h���܂��傤�B</term>
+ <term>ボトルネックを解消するにはJDBCをハンドコードしましょう。</term>
<listitem>
<para>
- �V�X�e���̃p�t�H�[�}���X�N���e�B�J���ȗ̈�ł́A
- �����̑����JDBC�ڎg���Ɨǂ��������܂���B
- �����������{�g���l�b�N�ɂȂ��Ă��邩 <emphasis>�͂����肷��</emphasis> �܂ł͑҂��Ă��������B
- �܂�JDBC�ڎg������Ƃ����āA�K����������Ȃ�Ƃ͌���Ȃ����Ƃ�����Ă��������B
- JDBC�ڎg���K�v������AHibernate�� <literal>Session</literal> ��I�[�v�����āA
- JDBC�R�l�N�V������g���Ɨǂ��������܂���B
- �ˑR�Ƃ��ē����g�����U�N�V�����헪�ƃR�l�N�V�����v���o�C�_���g���邩��ł��B
+ システムのパフォーマンスクリティカルな領域では、
+ ある種の操作にJDBCを直接使うと良いかもしれません。
+ しかし何がボトルネックになっているか <emphasis>はっきりする</emphasis> までは待ってください。
+ またJDBCを直接使うからといって、必ずしも速くなるとは限らないことも理解してください。
+ JDBCを直接使う必要があれば、Hibernateの <literal>Session</literal> をオープンして、
+ JDBCコネクションを使うと良いかもしれません。
+ 依然として同じトランザクション戦略とコネクションプロバイダが使えるからです。
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>Session</literal> �̃t���b�V���𗝉��܂��傤�B</term>
+ <term><literal>Session</literal> のフラッシュを理解しましょう。</term>
<listitem>
<para>
- Session���i����Ԃ�f�[�^�x�[�X�Ɠ��������邱�Ƃ��Ƃ��ǂ�����܂��B
- ���������ꂪ���܂�ɕp�ɂɋN����悤���ƁA�p�t�H�[�}���X�ɉe�����o�Ă��܂��B
- �����t���b�V�����ɂ�����A����̃g�����U�N�V�����̃N�G���⑀��̏��Ԃ�ύX���邱�ƂŁA
- �s�K�v�ȃt���b�V����ŏ����ɂł��܂��B
+ Sessionが永続状態をデータベースと同期させることがときどきあります。
+ しかしこれがあまりに頻繁に起こるようだと、パフォーマンスに影響が出てきます。
+ 自動フラッシュを無効にしたり、特定のトランザクションのクエリや操作の順番を変更することで、
+ 不必要なフラッシュを最小限にできます。
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>3�w�A�[�L�e�N�`���ł͕����I�u�W�F�N�g�̎g�p��l���܂��傤�B</term>
+ <term>3層アーキテクチャでは分離オブジェクトの使用を考えましょう。</term>
<listitem>
<para>
- �T�[�u���b�g / �Z�b�V�����r�[���A�[�L�e�N�`����g���Ƃ��A
- �T�[�u���b�g�w / JSP�w�ԂŃZ�b�V�����r�[���Ń��[�h�����i���I�u�W�F�N�g������ł��܂��B
- ���̍ۃ��N�G�X�g���ƂɐV����Session��g���Ă��������B
- �܂� <literal>Session.merge()</literal> �� <literal>Session.saveOrUpdate()</literal>
- ��g���āA�I�u�W�F�N�g�ƃf�[�^�x�[�X�������Ă��������B
+ サーブレット / セッションビーンアーキテクチャを使うとき、
+ サーブレット層 / JSP層間でセッションビーンでロードした永続オブジェクトをやり取りできます。
+ その際リクエストごとに新しいSessionを使ってください。
+ また <literal>Session.merge()</literal> や <literal>Session.saveOrUpdate()</literal>
+ を使って、オブジェクトとデータベースを同期させてください。
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>2�w�A�[�L�e�N�`���ł͒����i���R���e�L�X�g�̎g�p��l���܂��傤�B</term>
+ <term>2層アーキテクチャでは長い永続コンテキストの使用を考えましょう。</term>
<listitem>
<para>
- �ō��̃X�P�[���r���e�B��ɂ́A
- �f�[�^�x�[�X�g�����U�N�V������ł��邾���Z�����Ȃ���Ȃ�܂���B
- �����������Ԏ��s���� <emphasis>�A�v���P�[�V�����g�����U�N�V����</emphasis>
- �̎������K�v�Ȃ��Ƃ͂����ł��B
- ����̓��[�U�̎��_�����1�̍�ƒP�ʁiunit of work�j�ɂȂ�܂��B
- �A�v���P�[�V�����g�����U�N�V�����͂������̃N���C�A���g�̃��N�G�X�g/���X�|���X�T�C�N���ɂ܂�����܂��B
- �A�v���P�[�V�����g�����U�N�V�����̎����ɕ����I�u�W�F�N�g��g���͈̂�ʓI�ł��B
+ 最高のスケーラビリティを得るには、
+ データベーストランザクションをできるだけ短くしなければなりません。
+ しかし長い間実行する <emphasis>アプリケーショントランザクション</emphasis>
+ の実装が必要なことはしばしばです。
+ これはユーザの視点からは1個の作業単位(unit of work)になります。
+ アプリケーショントランザクションはいくつかのクライアントのリクエスト/レスポンスサイクルにまたがります。
+ アプリケーショントランザクションの実装に分離オブジェクトを使うのは一般的です。
- �����łȂ���A2�w�A�[�L�e�N�`���̏ꍇ�͓��ɓK�Ȃ��Ƃł����A
- �A�v���P�[�V�����g�����U�N�V�����̃��C�t�T�C�N���S�̂ɑ���
- �P��̃I�[�v���ȉi�����R���e�L�X�g�i�Z�b�V�����j��ێ����Ă��������B
- �����ĒP���Ƀ��N�G�X�g�̍Ō��JDBC�R�l�N�V��������ؒf���A
- ���̃��N�G�X�g�̍ŏ��ɍĐڑ����܂��B
+ そうでなければ、2層アーキテクチャの場合は特に適切なことですが、
+ アプリケーショントランザクションのライフサイクル全体に対して
+ 単一のオープンな永続化コンテキスト(セッション)を維持してください。
+ そして単純にリクエストの最後にJDBCコネクションから切断し、
+ 次のリクエストの最初に再接続します。
- �����ĕ����̃A�v���P�[�V�����g�����U�N�V�������[�X�P�[�X�ɓn����
- 1��Session��g���Ȃ��ł��������B
- �����łȂ���A�Â��f�[�^�ō�Ƃ��邱�ƂɂȂ�܂��B
+ 決して複数のアプリケーショントランザクションユースケースに渡って
+ 1個のSessionを使い回さないでください。
+ そうでなければ、古いデータで作業することになります。
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>��O�A�\�Ȃ�̂Ƃ��Ĉ����Ă͂����܂���B</term>
+ <term>例外を復帰可能なものとして扱ってはいけません。</term>
<listitem>
<para>
- ����́u�x�X�g�v�v���N�e�B�X�ȏ�́A�K�{�̃v���N�e�B�X�ł��B
- ��O�����������Ƃ��� <literal>Transaction</literal> ���[���o�b�N���āA
- <literal>Session</literal> ��N���[�Y�����������B
- �������Ȃ���Hibernate�̓������̏�Ԃ��i����Ԃ𐳊m�ɕ\�����Ă��邱�Ƃ�ۏł��܂���B
- ���̓��ʂȏꍇ�Ƃ��āA�^����ꂽ���ʎq���C���X�^���X���f�[�^�x�[�X�ɑ��݂��邩�ǂ����肷�邽�߂ɁA
- <literal>Session.load()</literal> ��g�����Ƃ͂�߂Ă��������B
- ���̑���� <literal>Session.get()</literal> ���N�G����g���Ă��������B
+ これは「ベスト」プラクティス以上の、必須のプラクティスです。
+ 例外が発生したときは <literal>Transaction</literal> をロールバックして、
+ <literal>Session</literal> をクローズしてください。
+ そうしないとHibernateはメモリの状態が永続状態を正確に表現していることを保証できません。
+ この特別な場合として、与えられた識別子を持つインスタンスがデータベースに存在するかどうかを判定するために、
+ <literal>Session.load()</literal> を使うことはやめてください。
+ その代わりに <literal>Session.get()</literal> かクエリを使ってください。
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>�֘A�ɂ͂Ȃ�ׂ��x���t�F�b�`��g���܂��傤�B</term>
+ <term>関連にはなるべく遅延フェッチを使いましょう。</term>
<listitem>
<para>
- �����t�F�b�`�͍T���߂ɂ��܂��傤�B
- �L���b�V���ɂ͊��S�ɕێ�����Ȃ��悤�ȃN���X�̊֘A�ɂ́A
- �v���L�V�ƒx���R���N�V������g���Ă��������B
- �L���b�V�������N���X�̊֘A�A�܂�L���b�V�����q�b�g����\�������ɍ����֘A�́A
- <literal>lazy="false"</literal> �ŐϋɓI�ȃt�F�b�`���I�ɖ����ɂ��Ă��������B
- �����t�F�b�`���K�ȓ���̃��[�X�P�[�X�ɂ́A
- �N�G���� <literal>left join fetch</literal> ��g�����������B
+ 即時フェッチは控えめにしましょう。
+ 二次キャッシュには完全に保持されないようなクラスの関連には、
+ プロキシと遅延コレクションを使ってください。
+ キャッシュされるクラスの関連、つまりキャッシュがヒットする可能性が非常に高い関連は、
+ <literal>lazy="false"</literal> で積極的なフェッチを明示的に無効にしてください。
+ 結合フェッチが適切な特定のユースケースには、
+ クエリで <literal>left join fetch</literal> を使ってください。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
- �t�F�b�`����Ă��Ȃ��f�[�^�Ɋւ�������邽�߂ɁA
- <emphasis>�r���[�̒��ŃI�[�v���Z�b�V������g��(open session in view)</emphasis>
- �p�^�[�����A�������ꂽ <emphasis>�g�ݗ��ăt�F�[�Y(assembly phase)</emphasis> ��g���܂��傤�B
+ フェッチされていないデータに関わる問題を避けるために、
+ <emphasis>ビューの中でオープンセッションを使う(open session in view)</emphasis>
+ パターンか、統制された <emphasis>組み立てフェーズ(assembly phase)</emphasis> を使いましょう。
</term>
<listitem>
<para>
- Hibernate�� <emphasis>Data Transfer Objects</emphasis> (DTO)�����ދ��ȍ�Ƃ���J���҂������܂��B
- �`���I��EJB�A�[�L�e�N�`���ł�DTO�͓�ړI������܂��F
- 1�ڂ́A�G���e�B�e�B�r�[�����V���A���C�Y����Ȃ����ւ̑�ł��B
- 2�ڂ́A�v���[���e�[�V�����w�ɐ��䂪�߂�O�ɁA
- �r���[�Ɏg���邷�ׂẴf�[�^���t�F�b�`����āADTO�ɕ��������悤�ȑg�ݗ��ăt�F�[�Y��ÖٓI�ɒ�`���܂��B
- Hibernate�ł�1�ڂ̖ړI���s�v�ɂȂ�܂��B
- �������r���[�̃����_�����O�����̊ԁA�i���R���e�L�X�g�i�Z�b�V�����j��I�[�v���ɂ����܂܂ɂ��Ȃ���A
- �g�ݗ��ăt�F�[�Y�͂܂��K�v�ł��i�����I�u�W�F�N�g�̒��̂ǂ̃f�[�^�����p�\���ɂ��āA
- �v���[���e�[�V�����w�ƌ����Ȏ�茈�߂��Ă���r�W�l�X���\�b�h��l���Ă݂Ă��������j�B
- �����Hibernate���̖��ł͂���܂���B
- �g�����U�N�V������ň��S�Ƀf�[�^�A�N�Z�X���邽�߂̊�{�I�ȗv���ł��B
+ Hibernateは <emphasis>Data Transfer Objects</emphasis> (DTO)を書く退屈な作業から開発者を解放します。
+ 伝統的なEJBアーキテクチャではDTOは二つ目的があります:
+ 1つ目は、エンティティビーンがシリアライズされない問題への対策です。
+ 2つ目は、プレゼンテーション層に制御が戻る前に、
+ ビューに使われるすべてのデータがフェッチされて、DTOに復元されるような組み立てフェーズを暗黙的に定義します。
+ Hibernateでは1つ目の目的が不要になります。
+ しかしビューのレンダリング処理の間、永続コンテキスト(セッション)をオープンにしたままにしなければ、
+ 組み立てフェーズはまだ必要です(分離オブジェクトの中のどのデータが利用可能かについて、
+ プレゼンテーション層と厳密な取り決めをしているビジネスメソッドを考えてみてください)。
+ これはHibernate側の問題ではありません。
+ トランザクション内で安全にデータアクセスするための基本的な要件です。
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>Hibernate����r�W�l�X���W�b�N�𒊏ۉ����邱�Ƃ�l���܂��傤�B</term>
+ <term>Hibernateからビジネスロジックを抽象化することを考えましょう。</term>
<listitem>
<para>
- �C���^�[�t�F�C�X�ŁiHibernate�́j�f�[�^�A�N�Z�X�R�[�h��B�����܂��傤�B
- <emphasis>DAO</emphasis> �� <emphasis>Thread Local Session</emphasis> �p�^�[����g�ݍ��킹�܂��傤�B
- <literal>UserType</literal> ��Hibernate�Ɋ֘A�t����ƁA
- �n���h�R�[�h����JDBC�ʼni��������N���X�����Ƃ�ł��܂��B
- �i���̃A�h�o�C�X�́u�\���傫�ȁv�A�v���P�[�V�����ɑ��Ă̂�̂ł��B
- �e�[�u����5�����Ȃ��悤�ȃA�v���P�[�V�����ɂ͓��Ă͂܂�܂���B�j
+ インターフェイスで(Hibernateの)データアクセスコードを隠蔽しましょう。
+ <emphasis>DAO</emphasis> と <emphasis>Thread Local Session</emphasis> パターンを組み合わせましょう。
+ <literal>UserType</literal> でHibernateに関連付けると、
+ ハンドコードしたJDBCで永続化するクラスを持つこともできます。
+ (このアドバイスは「十分大きな」アプリケーションに対してのものです。
+ テーブルが5個しかないようなアプリケーションには当てはまりません。)
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>�������֘A�}�b�s���O�͎g��Ȃ��悤�ɂ��܂��傤�B</term>
+ <term>珍しい関連マッピングは使わないようにしましょう。</term>
<listitem>
<para>
- �悢���[�X�P�[�X�ɖ{���̑��Α��֘A�����邱�Ƃ͋H�i�܂�j�ł��B
- �قƂ�ǂ̏ꍇ�u�����N�e�[�u���v�̕t���I�ȏ�K�v�ɂȂ�܂��B
- ���̏ꍇ�A�����N�N���X��2��1�Α��֘A��g�����������Ɨǂ��ł��B
- ���ۂقƂ�ǂ̏ꍇ�֘A��1�Α��Ƒ���1�Ȃ̂ŁA
- ���̃X�^�C���̊֘A��g���Ƃ��͖{���ɕK�v���ǂ�����l���Ă݂Ă��������B
+ よいユースケースに本当の多対多関連があることは稀(まれ)です。
+ ほとんどの場合「リンクテーブル」の付加的な情報が必要になります。
+ この場合、リンククラスに2つの1対多関連を使う方がずっと良いです。
+ 実際ほとんどの場合関連は1対多と多対1なので、
+ 他のスタイルの関連を使うときは本当に必要かどうかを考えてみてください。
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>�Ȃ�ׂ��o�����֘A�ɂ��܂��傤�B</term>
+ <term>なるべく双方向関連にしましょう。</term>
<listitem>
<para>
- �P�����֘A�͑o�����ɔ�ׂČ���������Ȃ�܂��B
- �傫�ȃA�v���P�[�V�����ł́A
- �قƂ�ǂ��ׂĂ̊֘A���o�����Ƀi�r�Q�[�V�����ł��Ȃ���Ȃ�܂���B
+ 単方向関連は双方向に比べて検索が難しくなります。
+ 大きなアプリケーションでは、
+ ほとんどすべての関連が双方向にナビゲーションできなければなりません。
</para>
</listitem>
</varlistentry>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/collection_mapping.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/collection_mapping.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/collection_mapping.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,14 +1,16 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="collections">
- <title>�R���N�V�����̃}�b�s���O</title>
+ <title>コレクションのマッピング</title>
<sect1 id="collections-persistent" revision="3">
- <title>�R���N�V�����̉i����</title>
+ <title>コレクションの永続化</title>
<para>
- �R���N�V�����^�̃t�B�[���h��i��������ɂ́A
- ���̃R���N�V�����^���C���^�[�t�F�C�X�^�ł���K�v������܂��B
- �Ⴆ�A
+ コレクション型のフィールドを永続化するには、
+ そのコレクション型がインターフェイス型である必要があります。
+ 例えば、
</para>
<programlisting><![CDATA[public class Product {
@@ -22,25 +24,25 @@
}]]></programlisting>
<para>
- ���݂���C���^�[�t�F�C�X�ɂ� <literal>java.util.Set</literal>�A
- <literal>java.util.Collection</literal>�A<literal>java.util.List</literal>�A
- <literal>java.util.Map</literal>�A<literal>java.util.SortedSet</literal>�A
- <literal>java.util.SortedMap</literal> �Ȃǂ�����܂��B
- �܂��́A�C�ӂ̃C���^�[�t�F�C�X���g���܂��I
- �i�������A�C�ӂ̃C���^�[�t�F�C�X��g�p����ꍇ�́A
+ 実在するインターフェイスには <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>
- �̎����N���X��쐬����K�v������܂��B�j
+ の実装クラスを作成する必要があります。)
</para>
<para>
- <literal>HashSet</literal> �̃C���X�^���X���C���X�^���X�ϐ���
- �ǂ̂悤�ɏ���������邩�ɒ��ڂ��Ă݂܂��傤�B
- ����͐V���ɐ������ꂽ�i�i��������Ă��Ȃ��j�R���N�V�����^�̃v���p�e�B��
- ����������œK�ȕ��@�ł��B
- �i�Ⴆ�� <literal>persist()</literal> �ɂ��j�C���X�^���X��i�������悤�Ƃ����Ƃ��A
- Hibernate�� <literal>HashSet</literal> ��Hibernate�Ǝ��� <literal>Set</literal>
- �̎����N���X�ɒu�������܂��B
- ���̂��߁A���̂悤�ȃG���[�ɂ͒��ӂ��K�v�ł��B
+ <literal>HashSet</literal> のインスタンスを持つインスタンス変数が
+ どのように初期化されるかに注目してみましょう。
+ これは新たに生成された(永続化されていない)コレクション型のプロパティを
+ 初期化する最適な方法です。
+ (例えば <literal>persist()</literal> により)インスタンスを永続化しようとしたとき、
+ Hibernateは <literal>HashSet</literal> をHibernate独自の <literal>Set</literal>
+ の実装クラスに置き換えます。
+ このため、次のようなエラーには注意が必要です。
</para>
<programlisting><![CDATA[Cat cat = new DomesticCat();
@@ -54,39 +56,39 @@
(HashSet) cat.getKittens(); // Error!]]></programlisting>
<para>
- Hibernate�ɂ�蒍�����ꂽ�i�����R���N�V�����́A�C���^�[�t�F�C�X�^�ɉ����āA
- <literal>HashMap</literal> �� <literal>HashSet</literal>�A
- <literal>TreeMap</literal>�A <literal>TreeSet</literal>�A
- <literal>ArrayList</literal> �̂悤�ɐU�����܂��B
+ Hibernateにより注入された永続性コレクションは、インターフェイス型に応じて、
+ <literal>HashMap</literal> や <literal>HashSet</literal>、
+ <literal>TreeMap</literal>、 <literal>TreeSet</literal>、
+ <literal>ArrayList</literal> のように振舞います。
</para>
<para>
- �R���N�V�����C���X�^���X�́A�l�^�Ƃ��ĕ��ʂɐU�����܂��B
- �i�����I�u�W�F�N�g�ɎQ�Ƃ��ꂽ�Ƃ��Ɏ����I�ɉi��������A
- �Q�Ƃ��Ȃ��Ȃ����Ƃ��Ɏ����I�ɍ폜����܂��B
- �������i�����I�u�W�F�N�g����ʂ̉i�����I�u�W�F�N�g�ɓn���ꂽ��A
- ���̗v�f�͌��݂̃e�[�u������ʂ̃e�[�u���Ɉړ����邩�����܂���B
- �Q�̃G���e�B�e�B�������R���N�V�����C���X�^���X���L���Ă͂����܂���B
- �����[�V���i�����f����x�[�X�ɂ��Ă��邽�߁A�R���N�V�����^�̃v���p�e�B��
- null�l�������Ă�Ӗ�������܂���B
- �܂�Hibernate�͎Q�Ɛ�̂Ȃ��R���N�V�����Ƌ�̃R���N�V�������ʂ��܂���B
+ コレクションインスタンスは、値型として普通に振舞います。
+ 永続化オブジェクトに参照されたときに自動的に永続化され、
+ 参照がなくなったときに自動的に削除されます。
+ もしある永続化オブジェクトから別の永続化オブジェクトに渡されたら、
+ その要素は現在のテーブルから別のテーブルに移動するかもしれません。
+ 2つのエンティティが同じコレクションインスタンスを共有してはいけません。
+ リレーショナルモデルをベースにしているため、コレクション型のプロパティに
+ null値を代入しても意味がありません。
+ つまりHibernateは参照先のないコレクションと空のコレクションを区別しません。
</para>
<para>
- ����������قǐS�z���Ȃ��Ă�\���܂���B
- ���i�g���Ă���Java�̃R���N�V�����Ɠ����悤�ɁA�i�����R���N�V������g���Ă��������B
- �o�����֘A�̈Ӗ��𗝉���悢�̂ł��i����͌�قǐ�����܂��j�B
+ しかしそれほど心配しなくても構いません。
+ 普段使っているJavaのコレクションと同じように、永続化コレクションを使ってください。
+ 双方向関連の意味を理解すればよいのです(これは後ほど説明します)。
</para>
</sect1>
<sect1 id="collections-mapping" revision="4">
- <title>�R���N�V�����̃}�b�s���O</title>
+ <title>コレクションのマッピング</title>
<para>
- �R���N�V������}�b�s���O���邽�߂̃}�b�s���O�v�f�́A�C���^�[�t�F�C�X�̌^�Ɉˑ����܂��B
- �Ⴆ�A<literal><set></literal> �v�f�� <literal>Set</literal> �^��
- �}�b�s���O���邽�߂Ɏg���܂��B
+ コレクションをマッピングするためのマッピング要素は、インターフェイスの型に依存します。
+ 例えば、<literal><set></literal> 要素は <literal>Set</literal> 型を
+ マッピングするために使います。
</para>
<programlisting><![CDATA[<class name="Product">
@@ -98,10 +100,10 @@
</class>]]></programlisting>
<para>
- �}�b�s���O�v�f�ɂ� <literal><set></literal> �̑��� <literal><list></literal>�A
- <literal><map></literal>�A<literal><bag></literal>�A
- <literal><array></literal>�A<literal><primitive-array></literal> ������܂��B
- ��\�Ƃ��āA<literal><map></literal> �v�f���L�Ɏ����܂��B
+ マッピング要素には <literal><set></literal> の他に <literal><list></literal>、
+ <literal><map></literal>、<literal><bag></literal>、
+ <literal><array></literal>、<literal><primitive-array></literal> があります。
+ 代表として、<literal><map></literal> 要素を下記に示します。
</para>
<programlistingco>
@@ -147,171 +149,171 @@
<calloutlist>
<callout arearefs="mappingcollection1">
<para>
- <literal>name</literal> �R���N�V�����^�ł���v���p�e�B�̖��O
+ <literal>name</literal> コレクション型であるプロパティの名前
</para>
</callout>
<callout arearefs="mappingcollection2">
<para>
- <literal>table</literal> �i�I�v�V���� - �f�t�H���g�̓v���p�e�B���j�R���N�V�����e�[�u���̖��O
- �i��Α��֘A�ł͎g�p���܂���j�B
+ <literal>table</literal> (オプション - デフォルトはプロパティ名)コレクションテーブルの名前
+ (一対多関連では使用しません)。
</para>
</callout>
<callout arearefs="mappingcollection3">
<para>
- <literal>schema</literal> �i�I�v�V�����j�e�[�u���X�L�[�}�̖��O�B
- ���[�g�v�f�Ő錾����Ă���X�L�[�}���D�悳��܂��B
+ <literal>schema</literal> (オプション)テーブルスキーマの名前。
+ ルート要素で宣言されているスキーマより優先されます。
</para>
</callout>
<callout arearefs="mappingcollection4">
<para>
- <literal>lazy</literal> �i�I�v�V���� - �f�t�H���g�� <literal>true</literal>�j
- �x���t�F�b�`���ɂ��A�֘A���ɑ����Ƀt�F�b�`�ɂ��邽�߂Ɏg�p���܂��B
- �܂��́A�uextra-lazy�v�t�F�b�`��L���ɂ��邽�߂Ɏg�p���܂��B
- �uextra-lazy�v�t�F�b�`�́A�قƂ�ǂ̑���ł̓R���N�V�������������܂���
- �i���ɑ傫�ȃR���N�V�����ɓK���Ă��܂��j�B
+ <literal>lazy</literal> (オプション - デフォルトは <literal>true</literal>)
+ 遅延フェッチを無効にし、関連を常に即時にフェッチにするために使用します。
+ または、「extra-lazy」フェッチを有効にするために使用します。
+ 「extra-lazy」フェッチは、ほとんどの操作ではコレクションを初期化しません
+ (非常に大きなコレクションに適しています)。
</para>
</callout>
<callout arearefs="mappingcollection5">
<para>
- <literal>inverse</literal> �i�I�v�V���� - �f�t�H���g�� <literal>false</literal>�j
- ���̃R���N�V�������o�����֘A�́u�t�v���ł���ƃ}�[�N���܂��B
+ <literal>inverse</literal> (オプション - デフォルトは <literal>false</literal>)
+ このコレクションが双方向関連の「逆」側であるとマークします。
</para>
</callout>
<callout arearefs="mappingcollection6">
<para>
- <literal>cascade</literal> �i�I�v�V���� - �f�t�H���g�� <literal>none</literal>�j
- �q�G���e�B�e�B�ւ̃J�X�P�[�h�����L���ɂ��܂��B
+ <literal>cascade</literal> (オプション - デフォルトは <literal>none</literal>)
+ 子エンティティへのカスケード操作を有効にします。
</para>
</callout>
<callout arearefs="mappingcollection7">
<para>
- <literal>sort</literal> �i�I�v�V�����j�R���N�V�������R�ȏ����Ń\�[�g����ꍇ��
- <literal>natural</literal> ��w�肵�܂��B
- ���邢��Comparator�N���X��w�肵�܂��B
+ <literal>sort</literal> (オプション)コレクションを自然な順序でソートする場合は
+ <literal>natural</literal> を指定します。
+ あるいはComparatorクラスを指定します。
</para>
</callout>
<callout arearefs="mappingcollection8">
<para>
- <literal>order-by</literal> �i�I�v�V�����AJDK1.4�̂݁j
- <literal>Map</literal>�A<literal>Set</literal>�Abag�̃C�e���[�V�����������`����
- �e�[�u���J������w�肷��Ƌ��ɁA
- �I�v�V�����Ƃ��� <literal>asc</literal>�A<literal>desc</literal> ��w�肵�܂��B
+ <literal>order-by</literal> (オプション、JDK1.4のみ)
+ <literal>Map</literal>、<literal>Set</literal>、bagのイテレーション順序を定義する
+ テーブルカラムを指定すると共に、
+ オプションとして <literal>asc</literal>、<literal>desc</literal> を指定します。
</para>
</callout>
<callout arearefs="mappingcollection9">
<para>
- <literal>where</literal> �i�I�v�V�����j�R���N�V�����̌�����폜�̍ۂɎg��
- �C�ӂ�SQL��<literal>WHERE</literal> ����w�肵�܂�
- �i���p�\�ȃf�[�^�̈ꕔ��������R���N�V�������܂ނׂ��Ƃ��ɁA����͗L�p�ł��j�B
+ <literal>where</literal> (オプション)コレクションの検索や削除の際に使う
+ 任意のSQLの<literal>WHERE</literal> 条件を指定します
+ (利用可能なデータの一部分だけをコレクションが含むべきときに、これは有用です)。
</para>
</callout>
<callout arearefs="mappingcollection10">
<para>
- <literal>fetch</literal>�i�I�v�V���� - �f�t�H���g�� <literal>select</literal>�j
- �O�������ɂ��t�F�b�`�A�����I��t�F�b�`�isequential select fetch�j�A
- �����T�u�Z���N�g�t�F�b�`�isequential subselect fetch�j�̂ǂꂩ��I���Ă��������B
+ <literal>fetch</literal>(オプション - デフォルトは <literal>select</literal>)
+ 外部結合によるフェッチ、順次選択フェッチ(sequential select fetch)、
+ 順次サブセレクトフェッチ(sequential subselect fetch)のどれかを選択してください。
</para>
</callout>
<callout arearefs="mappingcollection11">
<para>
- <literal>batch-size</literal> �i�I�v�V���� - �f�t�H���g�� <literal>1</literal>�j
- �R���N�V�����̃C���X�^���X�̒x���t�F�b�`�̂��߂́u�o�b�`�T�C�Y�v��w�肵�܂��B
+ <literal>batch-size</literal> (オプション - デフォルトは <literal>1</literal>)
+ コレクションのインスタンスの遅延フェッチのための「バッチサイズ」を指定します。
</para>
</callout>
<callout arearefs="mappingcollection12">
<para>
- <literal>access</literal> �i�I�v�V���� - �f�t�H���g�� <literal>property</literal>�j
- �R���N�V�����^�v���p�e�B�̒l�ɃA�N�Z�X���邽�߂Ɏg�p����헪�ł��B
+ <literal>access</literal> (オプション - デフォルトは <literal>property</literal>)
+ コレクション型プロパティの値にアクセスするために使用する戦略です。
</para>
</callout>
<callout arearefs="mappingcollection13">
<para>
- <literal>optimistic-lock</literal>�i�I�v�V���� - �f�t�H���g�� <literal>true</literal>�j
- �R���N�V�����̏�Ԃ�ς��邱�Ƃɂ���āA
- ���̃I�[�i�[�ł���G���e�B�e�B�̃o�[�W�������C���N�������g����邩��w�肵�܂��B
- �i��Α��֘A�ł́A�قƂ�ǂ̏ꍇ�ɂ����Ė����ɐݒ肷��̂��Ó��ł��B�j
+ <literal>optimistic-lock</literal>(オプション - デフォルトは <literal>true</literal>)
+ コレクションの状態を変えることによって、
+ そのオーナーであるエンティティのバージョンがインクリメントされるかを指定します。
+ (一対多関連では、ほとんどの場合において無効に設定するのが妥当です。)
</para>
</callout>
<callout arearefs="mappingcollection14">
<para>
- <literal>mutable</literal>�i�I�v�V���� - �f�t�H���g�� <literal>true</literal>�j
- <literal>false</literal> �l�́A�R���N�V�����̗v�f���ύX����Ȃ����Ƃ�\���܂�
- �i����ꍇ�ɂ́A�����p�t�H�[�}���X���߂܂��j�B
+ <literal>mutable</literal>(オプション - デフォルトは <literal>true</literal>)
+ <literal>false</literal> 値は、コレクションの要素が変更されないことを表します
+ (ある場合には、少しパフォーマンスを高めます)。
</para>
</callout>
</calloutlist>
</programlistingco>
<sect2 id="collections-foreignkeys" >
- <title>�R���N�V�����̊O���L�[</title>
+ <title>コレクションの外部キー</title>
<para>
- �R���N�V�����̃C���X�^���X�́A�f�[�^�x�[�X��ł́A
- ���̃R���N�V�������L����G���e�B�e�B�̊O���L�[�ɂ���Ď��ʂ���܂��B
- ���̊O���L�[�̓R���N�V�����e�[�u���� <emphasis>�R���N�V�����L�[�J����</emphasis> �ƌĂ�܂��B
- �R���N�V�����L�[�J������ <literal><key></literal> �v�f�ɂ��}�b�s���O���܂��B
+ コレクションのインスタンスは、データベース内では、
+ そのコレクションを所有するエンティティの外部キーによって識別されます。
+ この外部キーはコレクションテーブルの <emphasis>コレクションキーカラム</emphasis> と呼ばれます。
+ コレクションキーカラムは <literal><key></literal> 要素によりマッピングします。
</para>
<para>
- �O���L�[�J�����ɂ�null�ݒ萧���邩�����܂���B
- �قƂ�ǂ̃R���N�V�����ɓ��Ă͂܂�ł��傤�B
- �P�����̈�Α��֘A�ɂ����āA�O���L�[�J�����̓f�t�H���g��null�����ݒ�ɂȂ��Ă��܂��B
- ����āA<literal>not-null="true"</literal> ��w�肷��K�v�����邩�����܂���B
+ 外部キーカラムにはnull設定制約があるかもしれません。
+ ほとんどのコレクションに当てはまるでしょう。
+ 単方向の一対多関連において、外部キーカラムはデフォルトでnullを許す設定になっています。
+ よって、<literal>not-null="true"</literal> を指定する必要があるかもしれません。
</para>
<programlisting><![CDATA[<key column="productSerialNumber" not-null="true"/>]]></programlisting>
<para>
- �O���L�[�̐��� <literal>ON DELETE CASCADE</literal> ��g���������܂���B
+ 外部キーの制約が <literal>ON DELETE CASCADE</literal> を使うかもしれません。
</para>
<programlisting><![CDATA[<key column="productSerialNumber" on-delete="cascade"/>]]></programlisting>
<para>
- <literal><key></literal> �v�f�̂��ׂĂ̒�`�ɂ��Ă͑O�̏͂�Q�Ƃ��Ă��������B
+ <literal><key></literal> 要素のすべての定義については前の章を参照してください。
</para>
</sect2>
<sect2 id="collections-elements" >
- <title>�R���N�V�����̗v�f</title>
+ <title>コレクションの要素</title>
<para>
- �R���N�V�����͑���Hibernate�̌^�̂قƂ�ǁi���ׂĂ̊�{�^�A�J�X�^���^�A�R���|�[�l���g�A
- ���̃G���e�B�e�B�ւ̎Q�Ɓj��i�[���邱�Ƃ��ł��܂��B
- ���̓_�͏d�v�ȈႢ�ɂȂ�܂��B
- �R���N�V�����Ɋi�[���ꂽ�I�u�W�F�N�g���u�l�v�Z�}���e�B�N�X�Ƃ��Ĉ�����̂�
- �i���C�t�T�C�N���̓R���N�V�����̃I�[�i�[�Ɋ��S�Ɉˑ����܂��j�A
- ������͂��ꎩ�g�̃��C�t�T�C�N���������ʂ̃G���e�B�e�B�ւ̎Q�Ƃł��邩�̂��Ƃ����Ⴂ�ł��B
- ��҂́A2�̃I�u�W�F�N�g�Ԃ́u�����N�v��R���N�V�����ɕێ����Ă���ƌ��Ȃ��Ă��邾���ł��B
+ コレクションは他のHibernateの型のほとんど(すべての基本型、カスタム型、コンポーネント、
+ 他のエンティティへの参照)を格納することができます。
+ 次の点は重要な違いになります。
+ コレクションに格納されたオブジェクトが「値」セマンティクスとして扱われるのか
+ (ライフサイクルはコレクションのオーナーに完全に依存します)、
+ もしくはそれ自身のライフサイクルを持った別のエンティティへの参照であるかのかという違いです。
+ 後者は、2つのオブジェクト間の「リンク」をコレクションに保持していると見なしているだけです。
</para>
<para>
- �i�[�����^�� <emphasis>�R���N�V�����v�f�^</emphasis> �ƌĂ�܂��B
- �R���N�V�����v�f�́A<literal><element></literal> �܂��� <literal><composite-element></literal>
- �ɂ��}�b�s���O����A�G���e�B�e�B�ւ̎Q�Ƃ̏ꍇ�ɂ�
- <literal><one-to-many></literal> �܂��� <literal><many-to-many></literal>
- �ɂ��}�b�s���O����܂��B
- �ŏ��̓�͒l�Ƃ��ėv�f��}�b�s���O���A���̓�̓G���e�B�e�B�̊֘A��}�b�s���O����̂Ɏg���܂��B
+ 格納される型は <emphasis>コレクション要素型</emphasis> と呼ばれます。
+ コレクション要素は、<literal><element></literal> または <literal><composite-element></literal>
+ によりマッピングされ、エンティティへの参照の場合には
+ <literal><one-to-many></literal> または <literal><many-to-many></literal>
+ によりマッピングされます。
+ 最初の二つは値として要素をマッピングし、次の二つはエンティティの関連をマッピングするのに使われます。
</para>
</sect2>
<sect2 id="collections-indexed">
- <title>�C���f�b�N�X�t���̃R���N�V����</title>
+ <title>インデックス付きのコレクション</title>
<para>
- set��bag�����S�ẴR���N�V�����}�b�s���O�ɂ́A
- �R���N�V�����e�[�u���̒��� <emphasis>�C���f�b�N�X�p�̃J����</emphasis> ���K�v�ł��B
- ���̃J�����ɁA�z��� <literal>List</literal> �̃C���f�b�N�X�A
- ������� <literal>Map</literal> �̃L�[��}�b�s���O���܂��B
- <literal>Map</literal> �̃C���f�b�N�X�́A
- <literal><map-key></literal> �ɂ��}�b�s���O���ꂽ��{�^���A
- <literal><map-key-many-to-many></literal> �ɂ��}�b�s���O���ꂽ�G���e�B�e�B�̊֘A���A
- ���邢�� <literal><composite-map-key></literal> �ɂ��}�b�s���O���ꂽ�R���|�W�b�g�^�ɂȂ�܂��B
- �z���X�g�̃C���f�b�N�X�́A��� <literal>integer</literal> �^�ŁA
- <literal><list-index></literal> �v�f�ɂ��}�b�s���O���܂��B
- �}�b�s���O���ꂽ�J�����ɂ̓V�[�P���V�����Ȑ�����i�[���܂��i�f�t�H���g�ł�0����ԍ����t�����܂��j�B
+ 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から番号が付けられます)。
</para>
<programlistingco>
@@ -325,13 +327,13 @@
<calloutlist>
<callout arearefs="index1">
<para>
- <literal>column_name</literal>�i�K�{�j:�R���N�V�����C���f�b�N�X�̒l��ێ�����J�����̖��O�B
+ <literal>column_name</literal>(必須):コレクションインデックスの値を保持するカラムの名前。
</para>
</callout>
<callout arearefs="index2">
<para>
- <literal>base</literal>�i�I�v�V�����A�f�t�H���g�� <literal>0</literal>�j:
- ���X�g������͔z��̍ŏ��̗v�f�ɊY������C���f�b�N�X�J�����̒l�B
+ <literal>base</literal>(オプション、デフォルトは <literal>0</literal>):
+ リストもしくは配列の最初の要素に該当するインデックスカラムの値。
</para>
</callout>
</calloutlist>
@@ -352,17 +354,17 @@
<calloutlist>
<callout arearefs="mapkey1">
<para>
- <literal>column</literal>�i�I�v�V�����j: �R���N�V�����C���f�b�N�X�̒l��ێ�����J�����̖��O�B
+ <literal>column</literal>(オプション): コレクションインデックスの値を保持するカラムの名前。
</para>
</callout>
<callout arearefs="mapkey2">
<para>
- <literal>formula</literal>�i�I�v�V�����j: Map�̃L�[��]������̂Ɏg����SQL���B
+ <literal>formula</literal>(オプション): Mapのキーを評価するのに使われるSQL式。
</para>
</callout>
<callout arearefs="mapkey3">
<para>
- <literal>type</literal>�i�K�{�j: Map�̃L�[�̌^�B
+ <literal>type</literal>(必須): Mapのキーの型。
</para>
</callout>
</calloutlist>
@@ -382,20 +384,20 @@
<calloutlist>
<callout arearefs="indexmanytomany1">
<para>
- <literal>column</literal> �i�I�v�V�����j:
- �R���N�V�����C���f�b�N�X�̒l�̂��߂̊O���L�[�J�����̖��O�B
+ <literal>column</literal> (オプション):
+ コレクションインデックスの値のための外部キーカラムの名前。
</para>
</callout>
<callout arearefs="indexmanytomany2">
<para>
- <literal>formula</literal> �i�I�v�V�����j:
- Map�̃L�[�̂��߂̊O���L�[��]�����邽�߂Ɏg��SQL���B
+ <literal>formula</literal> (オプション):
+ Mapのキーのための外部キーを評価するために使うSQL式。
</para>
</callout>
<callout arearefs="indexmanytomany3">
<para>
- <literal>class</literal> �i�K�{�j:
- Map�̃L�[�Ƃ��Ďg����G���e�B�e�B�N���X�B
+ <literal>class</literal> (必須):
+ Mapのキーとして使われるエンティティクラス。
</para>
</callout>
</calloutlist>
@@ -403,33 +405,33 @@
<para>
- ����e�[�u���ɃC���f�b�N�X�J�������Ȃ��Ă�A�v���p�e�B�^�Ƃ��� <literal>List</literal> ��g��������A
- Hibernate�� <emphasis><bag></emphasis> �Ƃ��ăv���p�e�B��}�b�s���O���܂��B
- bag�̓f�[�^�x�[�X���畜������鎞�A������ێ����܂���B
- �������A�i��������Łj�\�[�g������A�iSQL�Łj�����t��������iorder by�j���邱�Ƃ�ł��܂��B
+ もしテーブルにインデックスカラムがなくても、プロパティ型として <literal>List</literal> を使いたければ、
+ Hibernateの <emphasis><bag></emphasis> としてプロパティをマッピングします。
+ bagはデータベースから復元される時、順序を保持しません。
+ しかし、(メモリ上で)ソートしたり、(SQLで)順序付けしたり(order by)することもできます。
</para>
</sect2>
<para>
- �����̈�ʓI�ȃ����[�V���i�����f����J�o�[�������߂ɁA
- �R���N�V�����̂��߂ɗ��p�ł���}�b�s���O�ɂ͂��Ȃ�̕�������܂��B
- �l�X�ȃ}�b�s���O�錾���ǂ̂悤�Ƀf�[�^�x�[�X�e�[�u���ɕϊ�����邩��m�邽�߂ɁA
- �X�L�[�}�����c�[����g���Ă݂�Ɨǂ��ł��傤�B
+ 多くの一般的なリレーショナルモデルをカバーしたために、
+ コレクションのために利用できるマッピングにはかなりの幅があります。
+ 様々なマッピング宣言がどのようにデータベーステーブルに変換されるかを知るために、
+ スキーマ生成ツールを使ってみると良いでしょう。
</para>
<sect2 id="collections-ofvalues" revision="2">
- <title>�l�̃R���N�V�����Ƒ��Α��֘A</title>
+ <title>値のコレクションと多対多関連</title>
<para>
- �l�̃R���N�V�����⑽�Α��֘A�́A��p�� <emphasis>�R���N�V�����e�[�u��</emphasis> ���K�v�ł��B
- ���̃e�[�u���́A�O���L�[�J�����ƁA
- <emphasis>�R���N�V�����v�f�̃J����</emphasis> �ƁA
- �ꍇ�ɂ���Ă̓C���f�b�N�X�J���������܂��B
+ 値のコレクションや多対多関連は、専用の <emphasis>コレクションテーブル</emphasis> が必要です。
+ このテーブルは、外部キーカラムと、
+ <emphasis>コレクション要素のカラム</emphasis> と、
+ 場合によってはインデックスカラムを持ちます。
</para>
<para>
- �l�̃R���N�V�����̂��߂ɁA<literal><element></literal>�^�O��g�p���܂��B
+ 値のコレクションのために、<literal><element></literal>タグを使用します。
</para>
<programlistingco>
@@ -452,24 +454,24 @@
<calloutlist>
<callout arearefs="element1b">
<para>
- <literal>column</literal> �i�I�v�V�����j: �R���N�V�����̗v�f�̒l��ێ�����J�����̖��O�B
+ <literal>column</literal> (オプション): コレクションの要素の値を保持するカラムの名前。
</para>
</callout>
<callout arearefs="element2b">
<para>
- <literal>formula</literal> �i�I�v�V�����j: �v�f��]�����邽�߂Ɏg��SQL���B
+ <literal>formula</literal> (オプション): 要素を評価するために使うSQL式。
</para>
</callout>
<callout arearefs="element3b">
<para>
- <literal>type</literal> �i�K�{�j�R���N�V�����̗v�f�̌^�B
+ <literal>type</literal> (必須)コレクションの要素の型。
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- <emphasis>���Α��֘A</emphasis> �� <literal><many-to-many></literal> �v�f�Ŏw�肵�܂��B
+ <emphasis>多対多関連</emphasis> は <literal><many-to-many></literal> 要素で指定します。
</para>
<programlistingco>
@@ -498,64 +500,64 @@
<calloutlist>
<callout arearefs="manytomany1">
<para>
- <literal>column</literal> �i�I�v�V�����j: �O���L�[�J�����̗v�f�̖��O�B
+ <literal>column</literal> (オプション): 外部キーカラムの要素の名前。
</para>
</callout>
<callout arearefs="manytomany2">
<para>
- <literal>formula</literal> �i�I�v�V�����j: �O���L�[�l�̗v�f��]�����邽�߂Ɏg��SQL���B
+ <literal>formula</literal> (オプション): 外部キー値の要素を評価するために使うSQL式。
</para>
</callout>
<callout arearefs="manytomany3">
<para>
- <literal>class</literal> �i�K�{�j: �֘A�N���X�̖��O�B
+ <literal>class</literal> (必須): 関連クラスの名前。
</para>
</callout>
<callout arearefs="manytomany4">
<para>
- <literal>fetch</literal> (�I�v�V���� - �f�t�H���g�� <literal>join</literal>):
- �֘A�̂��߂ɁA�O�������������I��t�F�b�`��L���ɂ��܂��B
- ����͓���ȃP�[�X�ł����A�G���e�B�e�B�Ƒ��̃G���e�B�e�B�Ƃ̑��Α��W��
- �i�P�� <literal>SELECT</literal> �ɂ��j���S�ɑ����Ƀt�F�b�`���邽�߂ɂ́A
- ���̃R���N�V�������̂����łȂ��A
- �l�X�g�����v�f�ł��� <literal><many-to-many></literal> �̂��̑����ɂ��Ă�
- <literal>join</literal> �t�F�b�`��L������K�v������܂��B
+ <literal>fetch</literal> (オプション - デフォルトは <literal>join</literal>):
+ 関連のために、外部結合か順次選択フェッチを有効にします。
+ これは特殊なケースですが、エンティティと他のエンティティとの多対多関係を
+ (1つの <literal>SELECT</literal> により)完全に即時にフェッチするためには、
+ そのコレクション自体だけでなく、
+ ネストした要素である <literal><many-to-many></literal> のこの属性についても
+ <literal>join</literal> フェッチを有効する必要があります。
</para>
</callout>
<callout arearefs="manytomany5">
<para>
- <literal>unique</literal> �i�I�v�V�����j:
- �O���L�[�J�����̃��j�[�N�����DDL������L���ɂ��܂��B
- ����́A�֘A�̑��d�x�������Α��ɂ��܂��B
+ <literal>unique</literal> (オプション):
+ 外部キーカラムのユニーク制約のDDL生成を有効にします。
+ これは、関連の多重度を事実上一対多にします。
</para>
</callout>
<callout arearefs="manytomany6">
<para>
- <literal>not-found</literal> �i�I�v�V���� - �f�t�H���g�� <literal>exception</literal>�j
- �Q�Ɛ�̍s���Ȃ��O���L�[��ǂ̂悤�Ɉ�������w�肵�܂��B
- <literal>ignore</literal> �ɂ���ƁA�s���Ȃ����Ƃ�֘A��������̂Ƃ��Ĉ����܂��B
+ <literal>not-found</literal> (オプション - デフォルトは <literal>exception</literal>)
+ 参照先の行がない外部キーをどのように扱うかを指定します。
+ <literal>ignore</literal> にすると、行がないことを関連が無いものとして扱います。
</para>
</callout>
<callout arearefs="manytomany7">
<para>
- <literal>entity-name</literal> �i�I�v�V�����j:
- <literal>class</literal> �̑�ւł���֘A�N���X�̃G���e�B�e�B���B
- <literal>class</literal> �̑���Ɏw�肷��A�֘A�N���X�̃G���e�B�e�B���B
+ <literal>entity-name</literal> (オプション):
+ <literal>class</literal> の代替である関連クラスのエンティティ名。
+ <literal>class</literal> の代わりに指定する、関連クラスのエンティティ名。
</para>
</callout>
<callout arearefs="manytomany8">
<para>
- <literal>property-ref</literal>: �i�I�v�V�����j
- ���̊O���L�[�Ɍ�������֘A�N���X�̃v���p�e�B���B
- �w�肵�Ȃ������ꍇ�́A�֘A�N���X�̎�L�[��g���܂��B
+ <literal>property-ref</literal>: (オプション)
+ この外部キーに結合する関連クラスのプロパティ名。
+ 指定しなかった場合は、関連クラスの主キーを使います。
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- �ȉ��ɂ�����������܂��B
- �܂���String��set�Ɋւ��Ă̗�ł��B
+ 以下にいくつか例を示します。
+ まずはStringのsetに関しての例です。
</para>
<programlisting><![CDATA[<set name="names" table="person_names">
@@ -564,7 +566,7 @@
</set>]]></programlisting>
<para>
- �����l��܂�bag�ibag�� <literal>order-by</literal> �����ɂ���Ĕ�����������`����Ă��܂��j
+ 整数値を含むbag(bagは <literal>order-by</literal> 属性によって反復順序が定義されています)
</para>
<programlisting><![CDATA[<bag name="sizes"
@@ -575,7 +577,7 @@
</bag>]]></programlisting>
<para>
- �G���e�B�e�B�̔z�� - ���̏ꍇ�A���Α��̊֘A�ł��B
+ エンティティの配列 - この場合、多対多の関連です。
</para>
<programlisting><![CDATA[<array name="addresses"
@@ -587,7 +589,7 @@
</array>]]></programlisting>
<para>
- ������Ɠ��t��map
+ 文字列と日付のmap
</para>
<programlisting><![CDATA[<map name="holidays"
@@ -600,7 +602,7 @@
</map>]]></programlisting>
<para>
- �R���|�[�l���g��list�i���̏͂ŏڂ���������܂��j
+ コンポーネントのlist(次の章で詳しく説明します)
</para>
<programlisting><![CDATA[<list name="carComponents"
@@ -617,33 +619,33 @@
</sect2>
<sect2 id="collections-onetomany">
- <title>��Α��֘A</title>
+ <title>一対多関連</title>
<para>
- <emphasis>��Α��֘A</emphasis> �́A�R���N�V������e�[�u�������A
- �O���L�[�ɂ��2�̃N���X�̃e�[�u����֘A�t���܂��B
- ���̃}�b�s���O�͕W���I��Java�̃R���N�V�����̃Z�}���e�B�N�X�����������܂��B
+ <emphasis>一対多関連</emphasis> は、コレクション・テーブルを介さず、
+ 外部キーにより2つのクラスのテーブルを関連付けます。
+ このマッピングは標準的なJavaのコレクションのセマンティクスをいくつか失います。
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- �G���e�B�e�B�N���X�̃C���X�^���X�́A
- 2�ȏ�̃R���N�V�����̃C���X�^���X�ɑ����Ă͂����܂���B
+ エンティティクラスのインスタンスは、
+ 2つ以上のコレクションのインスタンスに属してはいけません。
</para>
</listitem>
<listitem>
<para>
- �R���N�V�����Ɋ܂܂��G���e�B�e�B�N���X�̃C���X�^���X�́A
- �R���N�V�����C���f�b�N�X�̒l�Ƃ���2�x�ȏ㌻��Ă͂����܂���B
+ コレクションに含まれるエンティティクラスのインスタンスは、
+ コレクションインデックスの値として2度以上現れてはいけません。
</para>
</listitem>
</itemizedlist>
<para>
- <literal>Product</literal> ���� <literal>Part</literal> �ւ̊֘A�́A
- <literal>Part</literal> �e�[�u���ւ̊O���L�[�J�����ƁA�ꍇ�ɂ���Ă̓C���f�b�N�X�J�������K�v�ł��B
- <literal><one-to-many></literal> �^�O�́A���ꂪ��Α��֘A�ł��邱�Ƃ�\���Ă��܂��B
+ <literal>Product</literal> から <literal>Part</literal> への関連は、
+ <literal>Part</literal> テーブルへの外部キーカラムと、場合によってはインデックスカラムが必要です。
+ <literal><one-to-many></literal> タグは、これが一対多関連であることを表しています。
</para>
<programlistingco>
@@ -662,44 +664,44 @@
<calloutlist>
<callout arearefs="onetomany1">
<para>
- <literal>class</literal> �i�K�{�j: �֘A�N���X�̖��O�B
+ <literal>class</literal> (必須): 関連クラスの名前。
</para>
</callout>
<callout arearefs="onetomany2">
<para>
- <literal>not-found</literal> �i�I�v�V���� - �f�t�H���g�� <literal>exception</literal>�j:
- �Q�Ɛ�̍s���Ȃ��L���b�V�����ꂽ���ʎq��ǂ̂悤�Ɉ�������w�肵�܂��B
- <literal>ignore</literal> ��w�肷��ƁA�s���Ȃ����Ƃ�֘A���Ȃ���̂Ƃ��Ĉ����܂��B
+ <literal>not-found</literal> (オプション - デフォルトは <literal>exception</literal>):
+ 参照先の行がないキャッシュされた識別子をどのように扱うかを指定します。
+ <literal>ignore</literal> を指定すると、行がないことを関連がないものとして扱います。
</para>
</callout>
<callout arearefs="onetomany3">
<para>
- <literal>entity-name</literal> �i�I�v�V�����j:
- <literal>class</literal> �̑�ւł���֘A�N���X�̃G���e�B�e�B���B
- <literal>class</literal> �̑���Ɏw�肷��A�֘A�N���X�̃G���e�B�e�B���B
+ <literal>entity-name</literal> (オプション):
+ <literal>class</literal> の代替である関連クラスのエンティティ名。
+ <literal>class</literal> の代わりに指定する、関連クラスのエンティティ名。
</para>
</callout>
</calloutlist>
</programlistingco>
<para>
- <literal><one-to-many></literal> �v�f�̓J������錾����K�v���Ȃ����Ƃɒ��ӂ��Ă��������B
- ���l�� <literal>�e�[�u��</literal> ����w�肷��K�v�����܂���B
+ <literal><one-to-many></literal> 要素はカラムを宣言する必要がないことに注意してください。
+ 同様に <literal>テーブル</literal> 名を指定する必要もありません。
</para>
<para>
- <emphasis>�ƂĂ�d�v�Ȓ���:</emphasis> ��� <literal><one-to-many></literal>
- �֘A�̊O���L�[�J������ <literal>NOT NULL</literal>�Ɛ錾���ꂽ�ꍇ�A
- <literal><key></literal> �}�b�s���O�� <literal>not-null="true"</literal> ��錾���邩�A
- �R���N�V�����}�b�s���O�� <literal>inverse="true"</literal> ��t������ŁA
- <emphasis>�o�����֘A��g��</emphasis> �K�v������܂��B
- �o�����֘A�ɂ��Ă͂��̏͂̌�̂ق��Ő�����܂��B
+ <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> 必要があります。
+ 双方向関連についてはこの章の後のほうで説明します。
</para>
<para>
- ���̗�́A���́i<literal>Part</literal> �̉i���I�ȃv���p�e�B�ł��� <literal>partName</literal>�j
- �ɂ�� <literal>Part</literal> �G���e�B�e�B��map��\���Ă��܂��B
- formula�ɂ��C���f�b�N�X��g���Ă��邱�Ƃɒ��ӂ��Ă��������B
+ 次の例は、名称(<literal>Part</literal> の永続的なプロパティである <literal>partName</literal>)
+ による <literal>Part</literal> エンティティのmapを表しています。
+ formulaによるインデックスを使っていることに注意してください。
</para>
<programlisting><![CDATA[<map name="parts"
@@ -713,15 +715,15 @@
</sect1>
<sect1 id="collections-advancedmappings">
- <title>���x�ȃR���N�V������}�b�s���O</title>
+ <title>高度なコレクション・マッピング</title>
<sect2 id="collections-sorted" revision="2">
- <title>�\�[�g���ꂽ�R���N�V����</title>
+ <title>ソートされたコレクション</title>
<para>
- Hibernate�� <literal>java.util.SortedMap</literal> �� <literal>java.util.SortedSet</literal>
- ����������R���N�V������T�|�[�g���Ă��܂��B
- �J���҂̓}�b�s���O��`�t�@�C���ɃR���p���[�^��w�肵�Ȃ���Ȃ�܂���B
+ Hibernateは <literal>java.util.SortedMap</literal> と <literal>java.util.SortedSet</literal>
+ を実装したコレクションをサポートしています。
+ 開発者はマッピング定義ファイルにコンパレータを指定しなければなりません。
</para>
<programlisting><![CDATA[<set name="aliases"
@@ -738,22 +740,22 @@
</map>]]></programlisting>
<para>
- <literal>sort</literal> �����ɐݒ�ł���l�� <literal>unsorted</literal> �� <literal>natural</literal>
- ����сA<literal>java.util.Comparator</literal> ����������N���X�̖��O�ł��B
+ <literal>sort</literal> 属性に設定できる値は <literal>unsorted</literal> と <literal>natural</literal>
+ および、<literal>java.util.Comparator</literal> を実装したクラスの名前です。
</para>
<para>
- �\�[�g���ꂽ�R���N�V�����͎����I�ɂ� <literal>java.util.TreeSet</literal> ��
- <literal>java.util.TreeMap</literal> �̂悤�ɐU�����܂��B
+ ソートされたコレクションは実質的には <literal>java.util.TreeSet</literal> や
+ <literal>java.util.TreeMap</literal> のように振舞います。
</para>
<para>
- ����f�[�^�x�[�X���g�ɃR���N�V�����̗v�f����ׂ��������Ȃ�A
- <literal>set</literal> �� <literal>bag</literal>�A<literal>map</literal> ��
- <literal>order-by</literal> ������g���܂��B
- ���̉��@��JDK1.4�A������͂���ȏ�̃o�[�W�����ŗ��p�\�ł�
- �i<literal>LinkedHashSet</literal> �܂��� <literal>LinkedHashMap</literal>��g���Ď�������Ă��܂��j�B
- ����̓�������ł͂Ȃ��ASQL�N�G����Ŏ��s����܂��B
+ もしデータベース自身にコレクションの要素を並べさせたいなら、
+ <literal>set</literal> や <literal>bag</literal>、<literal>map</literal> の
+ <literal>order-by</literal> 属性を使います。
+ この解決法はJDK1.4、もしくはそれ以上のバージョンで利用可能です
+ (<literal>LinkedHashSet</literal> または <literal>LinkedHashMap</literal>を使って実装されています)。
+ 整列はメモリ上ではなく、SQLクエリ内で実行されます。
</para>
<programlisting><![CDATA[<set name="aliases" table="person_aliases" order-by="lower(name) asc">
@@ -768,12 +770,12 @@
</map>]]></programlisting>
<para>
- <literal>order-by</literal> �����̒l��SQL���߂ł����āAHQL���߂ł͂Ȃ����Ƃɒ��ӂ��Ă��������I
+ <literal>order-by</literal> 属性の値がSQL命令であって、HQL命令ではないことに注意してください!
</para>
<para>
- �֘A�́A�R���N�V������ <literal>filter()</literal> ��g�����ƂŁA
- ���s���ɔC�ӂ�criteria�ɂ���ă\�[�g���邱�Ƃ�\�ł��B
+ 関連は、コレクションの <literal>filter()</literal> を使うことで、
+ 実行時に任意のcriteriaによってソートすることも可能です。
</para>
<programlisting><![CDATA[sortedUsers = s.createFilter( group.getUsers(), "order by this.name" ).list();]]></programlisting>
@@ -781,18 +783,18 @@
</sect2>
<sect2 id="collections-bidirectional" revision="1">
- <title>�o�����֘A</title>
+ <title>双方向関連</title>
<para>
- <emphasis>�o�����֘A</emphasis> �͊֘A�̂ǂ���u���v����ł�i�r�Q�[�V�����ł��܂��B
- 2��ނ̑o�����֘A���T�|�[�g����Ă��܂��B
+ <emphasis>双方向関連</emphasis> は関連のどちら「側」からでもナビゲーションできます。
+ 2種類の双方向関連がサポートされています。
<variablelist>
<varlistentry>
<term>one-to-many</term>
<listitem>
<para>
- �Б���set��bag�A����Е����P��l�ł��B
+ 片側がsetかbag、もう片方が単一値です。
</para>
</listitem>
</varlistentry>
@@ -800,7 +802,7 @@
<term>many-to-many</term>
<listitem>
<para>
- ������set��bag�ł��B
+ 両側がsetかbagです。
</para>
</listitem>
</varlistentry>
@@ -809,15 +811,15 @@
</para>
<para>
- 2�̑��Α��֘A�œ����f�[�^�x�[�X�e�[�u����}�b�s���O���A
- �Е��� <emphasis>inverse</emphasis> �Ƃ��Đ錾���邱�ƂŁA
- �o�����̑��Α��֘A��w�肷�邱�Ƃ��o���܂�
- �i�ǂ����inverse�ɑI�Ƃ��Ă�A�����瑤�ɂ̓C���f�b�N�X�t���̃R���N�V�����͎g���܂���j�B
+ 2つの多対多関連で同じデータベーステーブルをマッピングし、
+ 片方を <emphasis>inverse</emphasis> として宣言することで、
+ 双方向の多対多関連を指定することが出来ます
+ (どちらをinverseに選んだとしても、そちら側にはインデックス付きのコレクションは使えません)。
</para>
<para>
- ���ɑo�����̑��Α��֘A�̗�����܂��B
- �e�J�e�S���͑����̃A�C�e�������Ƃ��ł��A�e�A�C�e���͑����̃J�e�S���ɑ����邱�Ƃ��o���܂��B
+ 次に双方向の多対多関連の例を示します。
+ 各カテゴリは多数のアイテムを持つことができ、各アイテムは多くのカテゴリに属することが出来ます。
</para>
<programlisting><![CDATA[<class name="Category">
@@ -841,11 +843,11 @@
</class>]]></programlisting>
<para>
- �֘A��inverse���ɂ̂ݍs��ꂽ�ύX�͉i���� <emphasis>����܂���</emphasis>�B
- ����́AHibernate�͑S�Ă̑o�����֘A�ɂ��āA��������ɂQ�̕\�������Ă���Ƃ����Ӗ��ł��B
- �܂���A����B�ւ̃����N�ŁA������B����A�ւ̃����N�Ƃ������Ƃł��B
- Java�̃I�u�W�F�N�g���f���ɂ��čl���AJava�őo�����W��ǂ�����č�邩��l����A
- ����͗����₷���ł��B���L�ɁAJava�ł̑o�����֘A�����܂��B
+ 関連のinverse側にのみ行われた変更は永続化 <emphasis>されません</emphasis>。
+ これは、Hibernateは全ての双方向関連について、メモリ上に2つの表現を持っているという意味です。
+ つまり一つはAからBへのリンクで、もう一つはBからAへのリンクということです。
+ Javaのオブジェクトモデルについて考え、Javaで双方向関係をどうやって作るかを考えれば、
+ これは理解しやすいです。下記に、Javaでの双方向関連を示します。
</para>
<programlisting><![CDATA[
@@ -856,13 +858,13 @@
session.persist(category); // The relationship will be saved]]></programlisting>
<para>
- �֘A��inverse�ł͂Ȃ����́A��������̕\����f�[�^�x�[�X�ɕۑ�����̂Ɏg���܂��B
+ 関連のinverseではない側は、メモリ上の表現をデータベースに保存するのに使われます。
</para>
<para>
- �o�����̈�Α��֘A���`����ɂ́A
- ��Α��֘A�𑽑Έ�֘A�Ɠ����e�[�u���̃J�����Ƀ}�b�s���O���A
- ������ <literal>inverse="true"</literal> �Ɛ錾���܂��B
+ 双方向の一対多関連を定義するには、
+ 一対多関連を多対一関連と同じテーブルのカラムにマッピングし、
+ 多側に <literal>inverse="true"</literal> と宣言します。
</para>
<programlisting><![CDATA[<class name="Parent">
@@ -884,19 +886,19 @@
</class>]]></programlisting>
<para>
- �֘A�̕Б��� <literal>inverse="true"</literal> ��ݒ肵�Ă�A
- �J�X�P�[�h����ɉe����^���܂���B�����͒������T�O�ł��I
+ 関連の片側に <literal>inverse="true"</literal> を設定しても、
+ カスケード操作に影響を与えません。これらは直交した概念です!
</para>
</sect2>
<sect2 id="collections-indexedbidirectional">
- <title>�C���f�b�N�X�t���R���N�V�����Ƒo�����֘A</title>
+ <title>インデックス付きコレクションと双方向関連</title>
<para>
- �Б��� <literal><list></literal> �� <literal><map></literal> �ł���
- �o�����֘A�́A���ɂ悭�l����K�v������܂��B
- �C���f�b�N�X�J�����Ƀ}�b�v�����q�N���X�̃v���p�e�B������ꍇ�́A���Ȃ��ł��B
- �R���N�V�����̃}�b�s���O�� <literal>inverse="true"</literal> ��g���������܂��B
+ 片側が <literal><list></literal> や <literal><map></literal> である
+ 双方向関連は、特によく考える必要があります。
+ インデックスカラムにマップされる子クラスのプロパティがある場合は、問題ないです。
+ コレクションのマッピングで <literal>inverse="true"</literal> を使い続けられます。
</para>
<programlisting><![CDATA[<class name="Parent">
@@ -922,11 +924,11 @@
</class>]]></programlisting>
<para>
- �������A�q�N���X�ɂ��̂悤�ȃv���p�e�B���Ȃ��ꍇ�́A
- �֘A��^�ɑo�����ł���ƍl���邱�Ƃ��ł��܂���
- �i�֘A�̕Б��ɗ��p�ł�������܂����A�������ɂ͂���܂���j�B
- ���̏ꍇ�́A�R���N�V������ <literal>inverse="true"</literal> ��}�b�s���O�ł��܂���B
- ����ɁA���̂悤�ȃ}�b�s���O���g���܂��B
+ しかし、子クラスにそのようなプロパティがない場合は、
+ 関連を真に双方向であると考えることができません
+ (関連の片側に利用できる情報がありますが、もう一方にはありません)。
+ この場合は、コレクションに <literal>inverse="true"</literal> をマッピングできません。
+ 代わりに、次のようなマッピングが使えます。
</para>
<programlisting><![CDATA[<class name="Parent">
@@ -953,19 +955,19 @@
</class>]]></programlisting>
<para>
- ���ӁF ���̃}�b�s���O�ł́A�֘A�̃R���N�V�����l�̑��́A
- �O���L�[��A�b�v�f�[�g����ӔC������܂��B
+ 注意: このマッピングでは、関連のコレクション値の側は、
+ 外部キーをアップデートする責任があります。
<!-- TODO: Does this really result in some unnecessary update statements? -->
</para>
</sect2>
<sect2 id="collections-ternary">
- <title>3���֘A</title>
+ <title>3項関連</title>
<para>
- 3���֘A�̃}�b�s���O�ɂ�3�̃A�v���[�`������܂��B
- 1�ڂ͊֘A��C���f�b�N�X�Ƃ��� <literal>Map</literal> ��g�p����A�v���[�`�ł��B
+ 3項関連のマッピングには3つのアプローチがあります。
+ 1つ目は関連をインデックスとして <literal>Map</literal> を使用するアプローチです。
</para>
<programlisting><![CDATA[<map name="contracts">
@@ -981,32 +983,32 @@
</map>]]></programlisting>
<para>
- 2�ڂ͒P���Ɋ֘A��G���e�B�e�B��N���X�Ƃ��ă��f�����蒼���A�v���[�`�ŁA
- �p�ɂɎg���܂��B
+ 2つ目は単純に関連をエンティティ・クラスとしてモデルを作り直すアプローチで、
+ 頻繁に使われます。
</para>
<para>
- �Ō��composite�v�f��g���A�v���[�`�ł��B����Ɋւ���c�_�͌�قǍs���܂��B
+ 最後はcomposite要素を使うアプローチです。これに関する議論は後ほど行います。
</para>
</sect2>
<sect2 id="collections-idbag" revision="1">
- <title><literal><idbag></literal>�̎g�p</title>
+ <title><literal><idbag></literal>の使用</title>
<para>
- �����L�[�͈�����̂ŁA�G���e�B�e�B�͐l�H�̎��ʎq(�㗝�L�[)���ׂ��ł���Ƃ����l��������́A
- ���Α��֘A�ƒl�̃R���N�V�������L�[��p�����e�[�u���փ}�b�s���O����̂͏�����Ɋ����邩�����܂���I
- �m���ɂ��̍l�����ɂ͋c�_�̗]�n������܂��B
- �����Ȋ֘A�e�[�u���͑㗝�L�[��g���Ă���v���Ȃ��悤�Ɏv���邩��ł�
- �i�����l�̃R���N�V�����͗��v������ <emphasis>����</emphasis> ����܂��j�B
- �Ƃ͂����AHibernate�͑㗝�L�[���e�[�u���֑��Α��֘A�ƒl�̃R���N�V������
- �}�b�s���O����@�\������Ă��܂��B
+ 複合キーは悪いもので、エンティティは人工の識別子(代理キー)を持つべきであるという考え方からは、
+ 多対多関連と値のコレクションを複合キーを用いたテーブルへマッピングするのは少し奇妙に感じるかもしれません!
+ 確かにこの考え方には議論の余地があります。
+ 純粋な関連テーブルは代理キーを使っても利益を得られないように思えるからです
+ (合成値のコレクションは利益がある <emphasis>かも</emphasis> しれませんが)。
+ とはいえ、Hibernateは代理キーを持つテーブルへ多対多関連と値のコレクションを
+ マッピングする機能も備えています。
</para>
<para>
- bag�̃Z�}���e�B�b�N�X������ <literal>List</literal>�i�܂��� <literal>Collection</literal>�j��
- <literal><idbag></literal> �v�f�Ƀ}�b�s���O�ł��܂��B
+ bagのセマンティックスを持った <literal>List</literal>(または <literal>Collection</literal>)を
+ <literal><idbag></literal> 要素にマッピングできます。
</para>
<programlisting><![CDATA[<idbag name="lovers" table="LOVERS">
@@ -1018,22 +1020,22 @@
</idbag>]]></programlisting>
<para>
- �����m�̂悤�� <literal><idbag></literal> �̓G���e�B�e�B��N���X�̂悤��
- �l�H�I��id�W�F�l���[�^�����Ă��܂��I
- �قȂ�㗝�L�[���ꂼ��̃R���N�V�����̗�Ɋ��蓖�Ă܂��B
- �������Ȃ���AHibernate�͂���s�̑㗝�L�[�̒l�����o���@�\�����Ă��܂���B
+ ご存知のように <literal><idbag></literal> はエンティティ・クラスのように
+ 人工的なidジェネレータを持っています!
+ 異なる代理キーをそれぞれのコレクションの列に割り当てます。
+ しかしながら、Hibernateはある行の代理キーの値を見つけ出す機構を持っていません。
</para>
<para>
- <literal><idbag></literal> ��X�V����p�t�H�[�}���X��
- �ʏ�� <literal><bag></literal> ����ǂ����Ƃɒ��ڂ��Ă��������I
- Hibernate�͌X�̍s����ʓI�Ɍ����邱�Ƃ��ł��A
- list��map�Aset�̂悤�Ɍʂɂ��̍s��X�V�A�폜�ł��܂��B
+ <literal><idbag></literal> を更新するパフォーマンスは
+ 通常の <literal><bag></literal> よりも良いことに注目してください!
+ Hibernateは個々の行を効果的に見つけることができ、
+ listやmap、setのように個別にその行を更新、削除できます。
</para>
<para>
- ���݂̎����ł́A<literal>native</literal> �Ƃ���id�����헪��
- <literal><idbag></literal> �R���N�V�����̎��ʎq�ɑ��Ďg���܂���B
+ 現在の実装では、<literal>native</literal> というid生成戦略を
+ <literal><idbag></literal> コレクションの識別子に対して使えません。
</para>
</sect2>
@@ -1055,10 +1057,10 @@
</sect1-->
<sect1 id="collections-example" revision="1">
- <title>�R���N�V�����̗�</title>
+ <title>コレクションの例</title>
<para>
- ����܂ł̐߂̐���ł͗����ɂ����̂ŁA�ȉ��̗���Ă��������B
+ これまでの節の説明では理解しにくいので、以下の例を見てください。
</para>
<programlisting><![CDATA[package eg;
@@ -1079,8 +1081,8 @@
}]]></programlisting>
<para>
- ���̃N���X�� <literal>Child</literal> �C���X�^���X�̃R���N�V���������Ă��܂��B
- ����e�X��child���ő�ł���parent�����Ă���Ȃ�A�ł���R�ȃ}�b�s���O�͈�Α��֘A�ł��B
+ このクラスは <literal>Child</literal> インスタンスのコレクションを持っています。
+ もし各々のchildが最大でも一つのparentを持っているならば、最も自然なマッピングは一対多関連です。
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -1105,7 +1107,7 @@
</hibernate-mapping>]]></programlisting>
<para>
- ����͈ȉ��̃e�[�u����`�Ƀ}�b�s���O���܂��B
+ これは以下のテーブル定義にマッピングします。
</para>
<programlisting><![CDATA[create table parent ( id bigint not null primary key )
@@ -1113,7 +1115,7 @@
alter table child add constraint childfk0 (parent_id) references parent]]></programlisting>
<para>
- ���parent�� <emphasis>�v��</emphasis> �����Ȃ�A�o�����̈�Α��֘A��g�p���Ă��������B
+ もしparentが <emphasis>要求</emphasis> されるなら、双方向の一対多関連を使用してください。
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -1139,7 +1141,7 @@
</hibernate-mapping>]]></programlisting>
<para>
- <literal>NOT NULL</literal> ����ɒ��ӂ��Ă��������B
+ <literal>NOT NULL</literal> 制約に注意してください。
</para>
<programlisting><![CDATA[create table parent ( id bigint not null primary key )
@@ -1150,8 +1152,8 @@
alter table child add constraint childfk0 (parent_id) references parent]]></programlisting>
<para>
- ���邢�́A������̊֘A�͒P�����ł���ׂ��Ƌ����咣����̂ł���A
- <literal><key></literal> �� <literal>NOT NULL</literal> �����錾�ł��܂��B
+ あるいは、もしこの関連は単方向であるべきと強く主張するのであれば、
+ <literal><key></literal> に <literal>NOT NULL</literal> 制約を宣言できます。
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -1176,7 +1178,7 @@
</hibernate-mapping>]]></programlisting>
<para>
- ����ŁA���child��������parent���Ă�Ȃ�A���Α��֘A���Ó��ł��B
+ 一方で、もしchildが複数のparentを持てるならば、多対多関連が妥当です。
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -1201,7 +1203,7 @@
</hibernate-mapping>]]></programlisting>
<para>
- �e�[�u����`�͈ȉ��̂悤�ɂȂ�܂��B
+ テーブル定義は以下のようになります。
</para>
<programlisting><![CDATA[create table parent ( id bigint not null primary key )
@@ -1213,12 +1215,12 @@
alter table childset add constraint childsetfk1 (child_id) references child]]></programlisting>
<para>
- parent/child�W�̃}�b�s���O�ɂ��Ă̂�葽���̗�⊮�S�Ȏ菇���K�v�ł���A
- <xref linkend="example-parentchild"/> �������������B
+ parent/child関係のマッピングについてのより多くの例や完全な手順が必要であれば、
+ <xref linkend="example-parentchild"/> をご覧ください。
</para>
<para>
- �܂��A����ɓ���Ȋ֘A�}�b�s���O��\�ł��B���̏͂ŏڂ����q�ׂ܂��B
+ また、さらに特殊な関連マッピングも可能です。次の章で詳しく述べます。
</para>
</sect1>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/component_mapping.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/component_mapping.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/component_mapping.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,20 +1,22 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="components">
- <title>�R���|�[�l���g�̃}�b�s���O</title>
+ <title>コンポーネントのマッピング</title>
<para>
- <emphasis>�R���|�[�l���g</emphasis> �̊T�O�́AHibernate��ʂ��ėl�X�ȏ̒���
- �قȂ�ړI�̂��߂ɍė��p����܂��B
+ <emphasis>コンポーネント</emphasis> の概念は、Hibernateを通して様々な状況の中で
+ 異なる目的のために再利用されます。
</para>
<sect1 id="components-dependentobjects" revision="2" >
- <title>�ˑ��I�u�W�F�N�g</title>
+ <title>依存オブジェクト</title>
<para>
- �R���|�[�l���g�́A�G���e�B�e�B�̎Q�Ƃł͂Ȃ��l�^�Ƃ��ĉi�������ꂽ�A
- ��܂��ꂽ�I�u�W�F�N�g�ł��B�R���|�[�l���g�Ƃ������t�ɂ��ẮA�R���|�W�V�����Ƃ���
- �I�u�W�F�N�g�w���̊T�O��Q�Ƃ��Ă��������i�A�[�L�e�N�`�����x���̃R���|�[�l���g�ł͂���܂���j�B
- �Ⴆ�A�ȉ���Person���f���̂悤�Ȃ�̂ł��B
+ コンポーネントは、エンティティの参照ではなく値型として永続化された、
+ 包含されたオブジェクトです。コンポーネントという言葉については、コンポジションという
+ オブジェクト指向の概念を参照してください(アーキテクチャレベルのコンポーネントではありません)。
+ 例えば、以下のPersonモデルのようなものです。
</para>
<programlisting><![CDATA[public class Person {
@@ -68,14 +70,14 @@
}]]></programlisting>
<para>
- ���܁A<literal>Name</literal> �� <literal>Person</literal> �̃R���|�[�l���g�Ƃ���
- �i�������邱�Ƃ��o���܂��B������ <literal>Name</literal> �͉i���������ɑ���getter�A
- setter���\�b�h���`���܂����A�C���^�[�t�F�C�X�⎯�ʎq�v���p�e�B���`����K�v��
- �Ȃ����Ƃɒ��ӂ��ĉ������B
+ いま、<literal>Name</literal> は <literal>Person</literal> のコンポーネントとして
+ 永続化することが出来ます。ここで <literal>Name</literal> は永続化属性に対してgetter、
+ setterメソッドを定義しますが、インターフェイスや識別子プロパティを定義する必要が
+ ないことに注意して下さい。
</para>
<para>
- �}�b�s���O��`�͈ȉ��̂悤�ɂȂ�܂��B
+ マッピング定義は以下のようになります。
</para>
<programlisting><![CDATA[<class name="eg.Person" table="person">
@@ -91,33 +93,33 @@
</class>]]></programlisting>
<para>
- Person�e�[�u���� <literal>pid</literal>�A
- <literal>birthday</literal>�A
- <literal>initial</literal>�A
- <literal>first</literal>�A
- <literal>last</literal> �J���������܂��B
+ Personテーブルは <literal>pid</literal>、
+ <literal>birthday</literal>、
+ <literal>initial</literal>、
+ <literal>first</literal>、
+ <literal>last</literal> カラムを持ちます。
</para>
<para>
- �S�Ă̒l�^�̂悤�ɁA�R���|�[�l���g�͎Q�Ƃ̋��L���邱�Ƃ��ł��܂���B
- ����������ƁA��l��Person�͓������O�����Ƃ��ł��܂����A���Person�I�u�W�F�N�g��
- "�l����������"�̕ʁX��name�I�u�W�F�N�g��܂�ł���Ƃ������Ƃł��B
- �R���|�[�l���g��null�l�̃Z�}���e�B�N�X�� <emphasis>�A�h�z�b�N</emphasis> �ł��B
- �R���|�[�l���g�̃I�u�W�F�N�g��ēǂݍ��݂���ہAHibernate�̓R���|�[�l���g�̂��ׂẴJ������
- null�ł���Ȃ�R���|�[�l���g���̂�null�ł���ƍl���܂��B
- ����͑��̏ꍇ��肠��܂���B
+ 全ての値型のように、コンポーネントは参照の共有をすることができません。
+ 言い換えると、二人のPersonは同じ名前を持つことができますが、二つのPersonオブジェクトは
+ "値が同じだけ"の別々のnameオブジェクトを含んでいるということです。
+ コンポーネントのnull値のセマンティクスは <emphasis>アドホック</emphasis> です。
+ コンポーネントのオブジェクトを再読み込みする際、Hibernateはコンポーネントのすべてのカラムが
+ nullであるならコンポーネント自体がnullであると考えます。
+ これは大抵の場合問題ありません。
</para>
<para>
- �R���|�[�l���g�̑����͂ǂ��Hibernate�̌^�ł�\���܂���i�R���N�V�����Amany-to-one�֘A�A
- ���̃R���|�[�l���g�Ȃǁj�B�l�X�g���ꂽ�R���|�[�l���g�͖ő��Ɏg��Ȃ��ƍl����ׂ��ł�
- <emphasis>����܂���</emphasis> �BHibernate�͔��ɂ��߂ׂ̍����I�u�W�F�N�g���f����T�|�[�g����悤�ɈӐ}����Ă��܂��B
+ コンポーネントの属性はどんなHibernateの型でも構いません(コレクション、many-to-one関連、
+ 他のコンポーネントなど)。ネストされたコンポーネントは滅多に使わないと考えるべきでは
+ <emphasis>ありません</emphasis> 。Hibernateは非常にきめの細かいオブジェクトモデルをサポートするように意図されています。
</para>
<para>
- <literal><component></literal> �v�f�͐e�G���e�B�e�B�ւ̋t�Q�ƂƂ��āA�R���|�[�l���g�N���X��
- ������}�b�s���O���� <literal><parent></literal> �T�u�v�f��g�p�ł��܂��B
+ <literal><component></literal> 要素は親エンティティへの逆参照として、コンポーネントクラスの
+ 属性をマッピングする <literal><parent></literal> サブ要素を使用できます。
</para>
<programlisting><![CDATA[<class name="eg.Person" table="person">
@@ -137,12 +139,12 @@
<sect1 id="components-incollections" revision="1">
- <title>�]������I�u�W�F�N�g�̃R���N�V����</title>
+ <title>従属するオブジェクトのコレクション</title>
<para>
- Hibernate�̓R���|�[�l���g�̃R���N�V������T�|�[�g���Ă��܂��i�Ⴆ�� <literal>Name</literal> �^�̔z��j�B
- <literal><element></literal> �^�O�� <literal><composite-element></literal> �^�O�Ɏ��ւ��邱�Ƃɂ��
- �R���|�[�l���g�R���N�V������錾���Ă��������B
+ Hibernateはコンポーネントのコレクションをサポートしています(例えば <literal>Name</literal> 型の配列)。
+ <literal><element></literal> タグを <literal><composite-element></literal> タグに取り替えることにより
+ コンポーネントコレクションを宣言してください。
</para>
<programlisting><![CDATA[<set name="someNames" table="some_names" lazy="true">
@@ -155,35 +157,35 @@
</set>]]></programlisting>
<para>
- ����: �R���|�W�b�g�G�������g�� <literal>Set</literal> ���`�����Ȃ�A
- <literal>equals()</literal> �� <literal>hashCode()</literal> �𐳂����������邱�Ƃ��d�v�ł��B
+ 注意: コンポジットエレメントの <literal>Set</literal> を定義したなら、
+ <literal>equals()</literal> と <literal>hashCode()</literal> を正しく実装することが重要です。
</para>
<para>
- �R���|�W�b�g�G�������g�̓R���N�V������܂܂��A�R���|�[�l���g��܂ނ��Ƃ����܂��B
- �R���|�W�b�g�G�������g���g���R���|�[�l���g��܂�ł���ꍇ�� <literal><nested-composite-element></literal> ��
- �g�p���Ă��������B�R���|�[�l���g�̃R���N�V�������g���R���|�[�l���g���Ƃ����P�[�X�͂߂����ɂ���܂���B
- ���̒i�K�܂łɁAone-to-many�֘A�̕������K�łȂ����Ən�l���Ă��������B
- �R���|�W�b�g�G�������g��G���e�B�e�B�Ƃ��čēx���f�����O���Ă݂Ă��������B
- �����������Java�̃��f���Ƃ��Ă͓����ł����A�����[�V���i�����f���Ɖi������͂܂���قȂ邱�Ƃɒ��ӂ��Ă��������B
+ コンポジットエレメントはコレクションを含まず、コンポーネントを含むこともあります。
+ コンポジットエレメント自身がコンポーネントを含んでいる場合は <literal><nested-composite-element></literal> を
+ 使用してください。コンポーネントのコレクション自身がコンポーネントを持つというケースはめったにありません。
+ この段階までに、one-to-many関連の方がより適切でないかと熟考してください。
+ コンポジットエレメントをエンティティとして再度モデリングしてみてください。
+ しかしこれはJavaのモデルとしては同じですが、リレーショナルモデルと永続動作はまだ若干異なることに注意してください。
</para>
<para>
- ��� <literal><set></literal> ��g�p����̂ł���A�R���|�W�b�g�G�������g�̃}�b�s���O��null�l���\��
- ������T�|�[�g���Ă��Ȃ����Ƃɒ��ӂ��Ă��������BHibernate�̓I�u�W�F�N�g��폜����Ƃ��A
- ���R�[�h���ʂ��邽�߂ɂ��ꂼ��̃J�����̒l��g�p����K�v�����邽�߁Anull�l�����Ƃ��o���܂���
- �i�R���|�W�b�g�G�������g�e�[�u���ɂ͕ʂ̎�L�[�J�����͂���܂���j�B
- �R���|�W�b�g�G�������g��not-null�̑����݂̂�g�p���邩�A�܂��� <literal><list></literal>�A<literal><map></literal>�A
- <literal><bag></literal>�A<literal><idbag></literal> ��I����K�v������܂��B
+ もし <literal><set></literal> を使用するのであれば、コンポジットエレメントのマッピングがnull値が可能な
+ 属性をサポートしていないことに注意してください。Hibernateはオブジェクトを削除するとき、
+ レコードを識別するためにそれぞれのカラムの値を使用する必要があるため、null値を持つことが出来ません
+ (コンポジットエレメントテーブルには別の主キーカラムはありません)。
+ コンポジットエレメントにnot-nullの属性のみを使用するか、または <literal><list></literal>、<literal><map></literal>、
+ <literal><bag></literal>、<literal><idbag></literal> を選択する必要があります。
</para>
<para>
- �R���|�W�b�g�G�������g�̓��ʂȃP�[�X�Ƃ��āA�l�X�g���ꂽ <literal><many-to-one></literal> ��������
- �R���|�W�b�g�G�������g������܂��B
- ���̃}�b�s���O�́A�R���|�W�b�g�G�������g�N���X�𑽑Α��֘A�e�[�u����
- �]���ȃJ�����փ}�b�s���O���܂��B
- ���̗�� <literal>Order</literal> ����A<literal>Item</literal> �ւ̑��Α��֘A�ł��B
- <literal>purchaseDate</literal>�A<literal>price</literal>�A<literal>quantity</literal> �͊֘A�̑����ƂȂ�܂��B
+ コンポジットエレメントの特別なケースとして、ネストされた <literal><many-to-one></literal> 属性を持つ
+ コンポジットエレメントがあります。
+ このマッピングは、コンポジットエレメントクラスを多対多関連テーブルの
+ 余分なカラムへマッピングします。
+ 次の例は <literal>Order</literal> から、<literal>Item</literal> への多対多関連です。
+ <literal>purchaseDate</literal>、<literal>price</literal>、<literal>quantity</literal> は関連の属性となります。
</para>
<programlisting><![CDATA[<class name="eg.Order" .... >
@@ -200,14 +202,14 @@
</class>]]></programlisting>
<para>
- ������A�o�����֘A�̃i�r�Q�[�V�����̂��߂ɔ��Α�����purchase�ւ̎Q�Ƃ��邱�Ƃ͏o���܂���B
- �R���|�[�l���g�͒l�^�ł���A�Q�Ƃ��L�ł��Ȃ����Ƃ�o���Ă����Ă��������B
- ��� <literal>Purchase</literal> �͈�� <literal>Order</literal> ��set�ɑ��݂ł��܂����A
- ������ <literal>Item</literal> ����Q�Ƃ��邱�Ƃ͏o���܂���B
+ もちろん、双方向関連のナビゲーションのために反対側からpurchaseへの参照を作ることは出来ません。
+ コンポーネントは値型であり、参照を共有できないことを覚えておいてください。
+ 一つの <literal>Purchase</literal> は一つの <literal>Order</literal> のsetに存在できますが、
+ 同時に <literal>Item</literal> から参照することは出来ません。
</para>
<para>
- 3���֘A�i���邢��4���Ȃǁj��\�ł��B
+ 3項関連(あるいは4項など)も可能です。
</para>
<programlisting><![CDATA[<class name="eg.Order" .... >
@@ -222,61 +224,61 @@
</class>]]></programlisting>
<para>
- �R���|�W�b�g�G�������g�͑��̃G���e�B�e�B�ւ̊֘A�Ƃ��āA
- �����V���^�b�N�X��g���Ă���N�G����Ŏg�p�ł��܂��B
+ コンポジットエレメントは他のエンティティへの関連として、
+ 同じシンタックスを使っているクエリ内で使用できます。
</para>
</sect1>
<sect1 id="components-asmapindex">
- <title>Map�̃C���f�b�N�X�Ƃ��ẴR���|�[�l���g</title>
+ <title>Mapのインデックスとしてのコンポーネント</title>
<para>
- <literal><composite-map-key></literal> �v�f�� <literal>Map</literal> �̃L�[�Ƃ��ăR���|�[�l���g�N���X��
- �}�b�s���O���܂��B�R���|�[�l���g�N���X��� <literal>hashCode()</literal> �� <literal>equals()</literal>
- �𐳊m�ɃI�[�o�[���C�h���Ă��������B
+ <literal><composite-map-key></literal> 要素は <literal>Map</literal> のキーとしてコンポーネントクラスを
+ マッピングします。コンポーネントクラス上で <literal>hashCode()</literal> と <literal>equals()</literal>
+ を正確にオーバーライドしてください。
</para>
</sect1>
<sect1 id="components-compositeid" revision="1">
- <title>�������ʎq�Ƃ��ẴR���|�[�l���g</title>
+ <title>複合識別子としてのコンポーネント</title>
<para>
- �R���|�[�l���g��G���e�B�e�B�N���X�̎��ʎq�Ƃ��Ďg�����Ƃ��ł��܂��B
- �R���|�[�l���g�N���X�͈ȉ��̏������K�v������܂��B
+ コンポーネントをエンティティクラスの識別子として使うことができます。
+ コンポーネントクラスは以下の条件を満たす必要があります。
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- <literal>java.io.Serializable</literal> ��������Ȃ���Ȃ�܂���B
+ <literal>java.io.Serializable</literal> を実装しなければなりません。
</para>
</listitem>
<listitem>
<para>
- �f�[�^�x�[�X��̕����L�[�̓������Ɩ����̂Ȃ��悤�ɁA<literal>equals()</literal>
- �� <literal>hashCode()</literal> ��Ď������Ȃ���Ȃ�܂���B
+ データベース上の複合キーの等価性と矛盾のないように、<literal>equals()</literal>
+ と <literal>hashCode()</literal> を再実装しなければなりません。
</para>
</listitem>
</itemizedlist>
<para>
- <emphasis>����: Hibernate3�ɂ����āA2�Ԗڂ̏��͐�ΓI�ȏ��ł͂���܂���B
- �������Ƃɂ����������Ă��������B
+ <emphasis>注意: Hibernate3において、2番目の条件は絶対的な条件ではありません。
+ しかしとにかく条件を満たしてください。
</emphasis>
</para>
<para>
- �����L�[�����邽�߂� <literal>IdentifierGenerator</literal> ��g�p���邱�Ƃ͂ł��܂���B
- ����ɃA�v���P�[�V���������ʎq���蓖�ĂȂ��Ă͂Ȃ�܂���B
+ 複合キーを生成するために <literal>IdentifierGenerator</literal> を使用することはできません。
+ 代わりにアプリケーションが識別子を割り当てなくてはなりません。
</para>
<para>
- �ʏ�� <literal><id></literal> �錾�̑���� <literal><composite-id></literal> �^�O��
- �i�l�X�g���ꂽ <literal><key-property></literal> �����Ƌ��Ɂj�g���܂��B
- �ȉ��̗�ł́A<literal>OrderLine</literal> �N���X�� <literal>Order</literal> �́i�����j��L�[��
- �ˑ�������L�[�����Ă��܂��B
+ 通常の <literal><id></literal> 宣言の代わりに <literal><composite-id></literal> タグを
+ (ネストされた <literal><key-property></literal> 属性と共に)使います。
+ 以下の例では、<literal>OrderLine</literal> クラスは <literal>Order</literal> の(複合)主キーに
+ 依存した主キーを持っています。
</para>
<programlisting><![CDATA[<class name="OrderLine">
@@ -299,9 +301,9 @@
</class>]]></programlisting>
<para>
- ���̂Ƃ��A<literal>OrderLine</literal> �e�[�u���֊֘A����O���L�[��܂������ł��B
- ���̃N���X�̃}�b�s���O�ł����錾���Ȃ���Ȃ�܂���B
- <literal>OrderLine</literal> �ւ̊֘A�͎��̂悤�Ƀ}�b�s���O����܂��B
+ このとき、<literal>OrderLine</literal> テーブルへ関連する外部キーもまた複合です。
+ 他のクラスのマッピングでこれを宣言しなければなりません。
+ <literal>OrderLine</literal> への関連は次のようにマッピングされます。
</para>
<programlisting><![CDATA[<many-to-one name="orderLine" class="OrderLine">
@@ -312,13 +314,13 @@
</many-to-one>]]></programlisting>
<para>
- �i<literal><column></literal> �^�O�͂ǂ��ł����Ă� <literal>column</literal> ������
- ����ɂȂ�܂��B�j
+ (<literal><column></literal> タグはどこであっても <literal>column</literal> 属性の
+ 代わりになります。)
</para>
<para>
- <literal>OrderLine</literal> �ւ� <literal>many-to-many</literal> �֘A��
- �����O���L�[��g���܂��B
+ <literal>OrderLine</literal> への <literal>many-to-many</literal> 関連も
+ 複合外部キーを使います。
</para>
<programlisting><![CDATA[<set name="undeliveredOrderLines">
@@ -331,8 +333,8 @@
</set>]]></programlisting>
<para>
- <literal>Order</literal> �ɂ��� <literal>OrderLine</literal> �̃R���N�V������
- ���̂�̂�g�p���܂��B
+ <literal>Order</literal> にある <literal>OrderLine</literal> のコレクションは
+ 次のものを使用します。
</para>
<programlisting><![CDATA[<set name="orderLines" inverse="true">
@@ -344,12 +346,12 @@
</set>]]></programlisting>
<para>
- �i<literal><one-to-many></literal> �����́A��ɂ���ăJ������錾���܂���j
+ (<literal><one-to-many></literal> 属性は、例によってカラムを宣言しません)
</para>
<para>
- <literal>OrderLine</literal> ���g���R���N�V���������Ă���ꍇ�A
- �����ɕ����O���L�[������Ă��܂��B
+ <literal>OrderLine</literal> 自身がコレクションを持っている場合、
+ 同時に複合外部キーも持っています。
</para>
<programlisting><![CDATA[<class name="OrderLine">
@@ -371,10 +373,10 @@
</sect1>
<sect1 id="components-dynamic" revision="1">
- <title>���I�R���|�[�l���g</title>
+ <title>動的コンポーネント</title>
<para>
- <literal>Map</literal> �^�̃v���p�e�B�̃}�b�s���O��\�ł��B
+ <literal>Map</literal> 型のプロパティのマッピングも可能です。
</para>
<programlisting><![CDATA[<dynamic-component name="userAttributes">
@@ -384,11 +386,11 @@
</dynamic-component>]]></programlisting>
<para>
- <literal><dynamic-component></literal> �}�b�s���O�̃Z�}���e�B�N�X�� <literal><component></literal>
- �Ɠ���̂�̂ł��B���̎�̃}�b�s���O�̗��_�́A�}�b�s���O�h�L�������g�̕ҏW�ɂ��A�z�u����bean�̑�����
- ����ł���_�ł��B�܂��ADOM�p�[�T�𗘗p���āA�}�b�s���O�h�L�������g�̃����^�C�����삪�\�ł��B
- ����ɁA<literal>Configuration</literal> �I�u�W�F�N�g�o�R��Hibernate�̃R���t�B�O���[�V�������̃��^���f����
- �A�N�Z�X�i�܂��͕ύX�j���\�ł��B
+ <literal><dynamic-component></literal> マッピングのセマンティクスは <literal><component></literal>
+ と同一のものです。この種のマッピングの利点は、マッピングドキュメントの編集により、配置時にbeanの属性を
+ 決定できる点です。また、DOMパーサを利用して、マッピングドキュメントのランタイム操作が可能です。
+ さらに、<literal>Configuration</literal> オブジェクト経由でHibernateのコンフィグレーション時のメタモデルに
+ アクセス(または変更)が可能です。
</para>
</sect1>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/configuration.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/configuration.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/configuration.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,30 +1,32 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="session-configuration" revision="1">
- <title>�ݒ�</title>
+ <title>設定</title>
<para>
- Hibernate�͂��܂��܂Ȋ��œ��삷��悤�Ƀf�U�C������Ă��邽�߁A���ɑ����̐ݒ�v�f������܂��B
- �K���Ȃ��ƂɁAHibernate�́A���J����Ă���p�b�P�[�W�� <literal>etc/</literal> �t�H���_�� <literal>hibernate.properties</literal>
- �ɁA�قƂ�ǂ̐ݒ�v�f�̓K�ȃf�t�H���g�l���L�q����Ă��܂��B
- ���� <literal>hibernate.properties</literal> ��N���X�p�X�ɐݒ肵�A�ݒ�v�f��J�X�^�}�C�Y���邾���ł��B
+ Hibernateはさまざまな環境で動作するようにデザインされているため、非常に多くの設定要素があります。
+ 幸いなことに、Hibernateは、公開されているパッケージの <literal>etc/</literal> フォルダの <literal>hibernate.properties</literal>
+ に、ほとんどの設定要素の適切なデフォルト値が記述されています。
+ この <literal>hibernate.properties</literal> をクラスパスに設定し、設定要素をカスタマイズするだけです。
</para>
<sect1 id="configuration-programmatic" revision="1">
- <title>�v���O������̐ݒ�</title>
+ <title>プログラム上の設定</title>
<para>
- <literal>org.hibernate.cfg.Configuration</literal> �̃C���X�^���X�́A
- Java�̌^��SQL�f�[�^�x�[�X�̃}�b�s���O�����ׂĎ����Ă��܂��B
- The <literal>Configuration</literal> �́A�i�s�ς́j <literal>SessionFactory</literal>
- ������Ƃ��Ɏg�p���܂��B
- ������XML�}�b�s���O�t�@�C����ϊ����A�}�b�s���O���ɂ��܂��B
+ <literal>org.hibernate.cfg.Configuration</literal> のインスタンスは、
+ Javaの型とSQLデータベースのマッピング情報をすべて持っています。
+ The <literal>Configuration</literal> は、(不変の) <literal>SessionFactory</literal>
+ を生成するときに使用します。
+ 複数のXMLマッピングファイルを変換し、マッピング情報にします。
</para>
<para>
- �ʏ�A<literal>Configuration</literal> �C���X�^���X�́A�����XML�}�b�s���O�t�@�C��
- �ɂ���Ē��ڏ���������܂��B����A�}�b�s���O�t�@�C�����N���X�p�X�ɐݒ肳��Ă���ꍇ�A
- ���̃��\�b�h��g���Ă��������B <literal>addResource()</literal> :
+ 通常、<literal>Configuration</literal> インスタンスは、特定のXMLマッピングファイル
+ によって直接初期化されます。もし、マッピングファイルがクラスパスに設定されている場合、
+ 次のメソッドを使ってください。 <literal>addResource()</literal> :
</para>
<programlisting><![CDATA[Configuration cfg = new Configuration()
@@ -32,8 +34,8 @@
.addResource("Bid.hbm.xml");]]></programlisting>
<para>
- ��ֈ�(������̂ق����ǂ��Ƃ������܂�)�Ƃ��ă}�b�s���O�N���X��w�肷����@�����܂��BHibernate�ɁA�}�b�s���O�t�@�C����
- �����������������F
+ 代替案(こちらのほうが良いときもあります)としてマッピングクラスを指定する方法もあります。Hibernateに、マッピングファイルを
+ 見つけさせてください:
</para>
<programlisting><![CDATA[Configuration cfg = new Configuration()
@@ -41,14 +43,14 @@
.addClass(org.hibernate.auction.Bid.class);]]></programlisting>
<para>
- Hibernate�́A�N���X�p�X�ɂ���ȉ��̂悤�Ȗ��O�̃}�b�s���O�t�@�C�������܂��B
- <literal>/org/hibernate/auction/Item.hbm.xml</literal> �A
- <literal>/org/hibernate/auction/Bid.hbm.xml</literal> �B
- ���̕��@���ƁA�n�[�h�R�[�f�B���O���ꂽ�t�@�C������r���ł��܂��B
+ Hibernateは、クラスパスにある以下のような名前のマッピングファイルを見つけます。
+ <literal>/org/hibernate/auction/Item.hbm.xml</literal> 、
+ <literal>/org/hibernate/auction/Bid.hbm.xml</literal> 。
+ この方法だと、ハードコーディングされたファイル名を排除できます。
</para>
<para>
- <literal>Configuration</literal> �́A�ݒ�v���p�e�B��w�肷�邱�Ƃ�ł��܂��F
+ <literal>Configuration</literal> は、設定プロパティを指定することもできます:
</para>
<programlisting><![CDATA[Configuration cfg = new Configuration()
@@ -59,103 +61,103 @@
.setProperty("hibernate.order_updates", "true");]]></programlisting>
<para>
- Hibernate�ɐݒ�v���p�e�B��ʂ����@��1�ł͂���܂���B
- ���܂��܂ȃI�v�V������p�ӂ��Ă��܂��F
+ Hibernateに設定プロパティを通す方法は1つではありません。
+ さまざまなオプションを用意しています:
</para>
<orderedlist spacing="compact">
<listitem>
<para>
- <literal>java.util.Properties</literal> �C���X�^���X��
- <literal>Configuration.setProperties()</literal> �ɓn���܂��B
+ <literal>java.util.Properties</literal> インスタンスを
+ <literal>Configuration.setProperties()</literal> に渡します。
</para>
</listitem>
<listitem>
<para>
- <literal>hibernate.properties</literal> ��
- �N���X�p�X�̃��[�g�f�B���N�g���ɒu���܂��B
+ <literal>hibernate.properties</literal> を
+ クラスパスのルートディレクトリに置きます。
</para>
</listitem>
<listitem>
<para>
- <literal>System</literal> �v���p�e�B��
- <literal>java -Dproperty=value</literal> ��g���悤�ɐݒ肵�܂��B
+ <literal>System</literal> プロパティが
+ <literal>java -Dproperty=value</literal> を使うように設定します。
</para>
</listitem>
<listitem>
<para>
- <literal><property></literal> �v�f��
- <literal>hibernate.cfg.xml</literal> �i��q�j�ɐݒ肵�܂��B
+ <literal><property></literal> 要素を
+ <literal>hibernate.cfg.xml</literal> (後述)に設定します。
</para>
</listitem>
</orderedlist>
<para>
- �������n�߂����̂Ȃ�A<literal>hibernate.properties</literal>
- ��g���̂���Ԃ̋ߓ��ł��B
+ 今すぐ始めたいのなら、<literal>hibernate.properties</literal>
+ を使うのが一番の近道です。
</para>
<para>
- <literal>Configuration</literal> �́A�N�����ɂ�������I�u�W�F�N�g�ł���A
- ��x <literal>SessionFactory</literal> ��������́A�j������邱�Ƃ�Ӑ}���Ă��܂��B
+ <literal>Configuration</literal> は、起動時にだけあるオブジェクトであり、
+ 一度 <literal>SessionFactory</literal> を生成した後は、破棄されることを意図しています。
</para>
</sect1>
<sect1 id="configuration-sessionfactory">
- <title>SessionFactory��擾����</title>
+ <title>SessionFactoryを取得する</title>
<para>
- <literal>Configuration</literal> �����ׂẴ}�b�s���O�����͂�����A
- �A�v���P�[�V�����́A <literal>Session</literal> �t�@�N�g���C���X�^���X��擾���܂��B
- ����SessionFactory�́AHibernate��g�p���邷�ׂẴX���b�h�ŋ��L�����ׂ��ł��B
+ <literal>Configuration</literal> がすべてのマッピング情報を解析したら、
+ アプリケーションは、 <literal>Session</literal> ファクトリインスタンスを取得します。
+ このSessionFactoryは、Hibernateを使用するすべてのスレッドで共有されるべきです。
</para>
<programlisting><![CDATA[SessionFactory sessions = cfg.buildSessionFactory();]]></programlisting>
<para>
- Hibernate�́A <literal>SessionFactory</literal> ���������邱�Ƃ��ł��܂��B
- ����́A�����̃f�[�^�x�[�X��g�p����ꍇ�ɕ֗��ł��B
+ Hibernateは、 <literal>SessionFactory</literal> を複数生成することができます。
+ これは、複数のデータベースを使用する場合に便利です。
</para>
</sect1>
<sect1 id="configuration-hibernatejdbc" revision="1">
- <title>JDBC�R�l�N�V����</title>
+ <title>JDBCコネクション</title>
<para>
- �ʏ�A�J���҂� <literal>SessionFactory</literal> �����ASessionFactory��JDBC�R�l�N�V������v�[�����O�������ƍl���܂��B
- ���̃A�v���[�`��̗p����ꍇ�A�P���� <literal>Session</literal> ��I�[�v�����Ă��������F
+ 通常、開発者は <literal>SessionFactory</literal> を生成し、SessionFactoryでJDBCコネクションをプーリングしたいと考えます。
+ そのアプローチを採用する場合、単純に <literal>Session</literal> をオープンしてください:
</para>
<programlisting><![CDATA[Session session = sessions.openSession(); // open a new Session]]></programlisting>
<para>
- ���ꂾ���ŁA�v�[�����O����JDBC�R�l�N�V������g���ĖړI�̃f�[�^�x�[�X
- �ɃA�N�Z�X���邱�Ƃ��ł��܂��B
+ これだけで、プーリングしたJDBCコネクションを使って目的のデータベース
+ にアクセスすることができます。
</para>
<para>
- ���̂��߂ɂ́AJDBC�R�l�N�V�����̃v���p�e�B��Hibernate�ɐݒ肷��K�v������܂��B
- ���ׂĂ�Hibernate�v���p�e�B���ƃZ�}���e�B�N�X��
- <literal>org.hibernate.cfg.Environment</literal> �N���X�ɒ�`����Ă��܂��B
- ���̐ݒ��JDBC�R�l�N�V�����ݒ�̒��ň�ԏd�v�Ȃ�̂ł��B
+ そのためには、JDBCコネクションのプロパティをHibernateに設定する必要があります。
+ すべてのHibernateプロパティ名とセマンティクスは
+ <literal>org.hibernate.cfg.Environment</literal> クラスに定義されています。
+ この設定はJDBCコネクション設定の中で一番重要なものです。
</para>
<para>
- ����A�ȉ��̃v���p�e�B��ݒ肷��ƁAHibernate�̓R�l�N�V������擾����i�v�[����j���߂�
- <literal>java.sql.DriverManager</literal> ��g���܂��B
+ もし、以下のプロパティを設定すると、Hibernateはコネクションを取得する(プールも)ために
+ <literal>java.sql.DriverManager</literal> を使います。
</para>
<table frame="topbot">
- <title>Hibernate JDBC�v���p�e�B</title>
+ <title>Hibernate JDBCプロパティ</title>
<tgroup cols="2">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="1*"/>
<thead>
<row>
- <entry>�v���p�e�B��</entry>
- <entry>�Ӗ�</entry>
+ <entry>プロパティ名</entry>
+ <entry>意味</entry>
</row>
</thead>
<tbody>
@@ -164,7 +166,7 @@
<literal>hibernate.connection.driver_class</literal>
</entry>
<entry>
- <emphasis>JDBC�h���C�o�N���X</emphasis>
+ <emphasis>JDBCドライバクラス</emphasis>
</entry>
</row>
<row>
@@ -196,7 +198,7 @@
<literal>hibernate.connection.pool_size</literal>
</entry>
<entry>
- <emphasis>�v�[������R�l�N�V�����̍ő吔</emphasis>
+ <emphasis>プールするコネクションの最大数</emphasis>
</entry>
</row>
</tbody>
@@ -204,26 +206,26 @@
</table>
<para>
- Hibernate�̃R�l�N�V�����v�[���A���S���Y���͔��ɏ���I�Ȃ�̂ł��B
- ����͂����Ɏn�߂���悤�ɂƗp�ӂ��ꂽ��̂ŁA<emphasis>���i�Ƃ��Ďg�p���邱�Ƃ�Ӑ}���Ă��܂���</emphasis> �B
- �܂��A�p�t�H�[�}���X�̃e�X�g�̂��߂̂�̂ł����܂���B
- �ō��̃p�t�H�[�}���X�ƈ��萫�������v�[���������������A�T�[�h�p�[�e�B�̃c�[�������߂��܂��B
- <literal>hibernate.connection.pool_size</literal> �v���p�e�B��
- �K�ȃR�l�N�V�����v�[���T�C�Y��L�q���Ă��������B
- ���̂܂܂���Hibernate�̃R�l�N�V�����v�[����g���܂��B
- �Ⴆ�Ύ��̂悤��C3P0��g���܂��B
+ Hibernateのコネクションプールアルゴリズムは非常に初歩的なものです。
+ これはすぐに始められるようにと用意されたもので、<emphasis>製品として使用することを意図していません</emphasis> 。
+ また、パフォーマンスのテストのためのものでもありません。
+ 最高のパフォーマンスと安定性を持ったプールを実現したければ、サードパーティのツールをお勧めします。
+ <literal>hibernate.connection.pool_size</literal> プロパティに
+ 適切なコネクションプールサイズを記述してください。
+ このままだとHibernateのコネクションプールを使います。
+ 例えば次のようにC3P0を使います。
</para>
<para>
- C3P0�̓I�[�v���\�[�XJDBC�R�l�N�V�����v�[���ŁAHibernate�� <literal>lib</literal>
- �f�B���N�g���ɂ���܂��B����A<literal>hibernate.c3p0.*</literal> �v���p�e�B��
- �Z�b�g����AHibernate�́A <literal>C3P0ConnectionProvider</literal> ��g���܂��B
- ���Proxool��g�������ꍇ�́A <literal>hibernate.properties</literal> �p�b�P�[�W��
- �Q�Ƃ�����AHibernate��Web�T�C�g�ł�葽���̏���擾���Ă��������B
+ C3P0はオープンソースJDBCコネクションプールで、Hibernateの <literal>lib</literal>
+ ディレクトリにあります。もし、<literal>hibernate.c3p0.*</literal> プロパティを
+ セットすれば、Hibernateは、 <literal>C3P0ConnectionProvider</literal> を使います。
+ もしProxoolを使いたい場合は、 <literal>hibernate.properties</literal> パッケージを
+ 参照したり、HibernateのWebサイトでより多くの情報を取得してください。
</para>
<para>
- C3P0�p�� <literal>hibernate.properties</literal> �t�@�C�����Ƃ��Ď����܂��F
+ C3P0用の <literal>hibernate.properties</literal> ファイルを例として示します:
</para>
<programlisting id="c3p0-configuration" revision="1"><![CDATA[hibernate.connection.driver_class = org.postgresql.Driver
@@ -237,21 +239,21 @@
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]></programlisting>
<para>
- �A�v���P�[�V�����T�[�o��Ŏg���ꍇ�́AHibernate��ݒ肵�A
- �A�v���P�[�V�����T�[�o����R�l�N�V������擾����悤�ɂ��Ă��������B
- <literal>Datasource</literal> ��JNDI�ɓo�^���܂��B������
- �v���p�e�B��ȉ��̂悤�ɐݒ肵�Ă��������B
+ アプリケーションサーバ上で使う場合は、Hibernateを設定し、
+ アプリケーションサーバからコネクションを取得するようにしてください。
+ <literal>Datasource</literal> をJNDIに登録します。そして
+ プロパティを以下のように設定してください。
</para>
<table frame="topbot">
- <title>Hibernate �f�[�^�\�[�X�v���p�e�B</title>
+ <title>Hibernate データソースプロパティ</title>
<tgroup cols="2">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="1*"/>
<thead>
<row>
- <entry>�v���p�e�B��</entry>
- <entry>�Ӗ�</entry>
+ <entry>プロパティ名</entry>
+ <entry>意味</entry>
</row>
</thead>
<tbody>
@@ -260,7 +262,7 @@
<literal>hibernate.connection.datasource</literal>
</entry>
<entry>
- <emphasis>�f�[�^�\�[�X��JNDI��</emphasis>
+ <emphasis>データソースのJNDI名</emphasis>
</entry>
</row>
<row>
@@ -268,7 +270,7 @@
<literal>hibernate.jndi.url</literal>
</entry>
<entry>
- <emphasis>JNDI�v���o�C�_��URL</emphasis> (�I�v�V����)
+ <emphasis>JNDIプロバイダのURL</emphasis> (オプション)
</entry>
</row>
<row>
@@ -276,7 +278,7 @@
<literal>hibernate.jndi.class</literal>
</entry>
<entry>
- <emphasis>JNDI�N���X <literal>InitialContextFactory</literal> </emphasis> (�I�v�V����)
+ <emphasis>JNDIクラス <literal>InitialContextFactory</literal> </emphasis> (オプション)
</entry>
</row>
<row>
@@ -284,7 +286,7 @@
<literal>hibernate.connection.username</literal>
</entry>
<entry>
- <emphasis>database user</emphasis> (�I�v�V����)
+ <emphasis>database user</emphasis> (オプション)
</entry>
</row>
<row>
@@ -292,7 +294,7 @@
<literal>hibernate.connection.password</literal>
</entry>
<entry>
- <emphasis>database user password</emphasis> (�I�v�V����)
+ <emphasis>database user password</emphasis> (オプション)
</entry>
</row>
</tbody>
@@ -300,61 +302,61 @@
</table>
<para>
- �A�v���P�[�V�����T�[�o������ꂽJNDI�f�[�^�\�[�X��g��
- <literal>hibernate.properties</literal> �t�@�C���̗�����܂��F
+ アプリケーションサーバから提供されたJNDIデータソースを使う
+ <literal>hibernate.properties</literal> ファイルの例を示します:
</para>
<programlisting><![CDATA[hibernate.connection.datasource = java:/comp/env/jdbc/test
-hibernate.transaction.factory_class = \
+hibernate.transaction.factory_class = ¥
org.hibernate.transaction.JTATransactionFactory
-hibernate.transaction.manager_lookup_class = \
+hibernate.transaction.manager_lookup_class = ¥
org.hibernate.transaction.JBossTransactionManagerLookup
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]></programlisting>
<para>
- JNDI�f�[�^�\�[�X����擾����JDBC�R�l�N�V�����́A�A�v���P�[�V�����T�[�o��
- �R���e�i�Ǘ��g�����U�N�V�����Ɏ����I�ɎQ�����܂��B
+ JNDIデータソースから取得したJDBCコネクションは、アプリケーションサーバの
+ コンテナ管理トランザクションに自動的に参加します。
</para>
<para>
- �C�ӂ̃R�l�N�V�����v���p�e�B�́A�^����ꂽ�h <literal>hibernate.connnection</literal> �h
- �v���p�e�B���ɂ���ė^�����܂��B�Ⴆ�A <literal>charSet</literal> ��ݒ肵�����ꍇ�́A
- <literal>hibernate.connection.charSet</literal> ��g���܂��B
+ 任意のコネクションプロパティは、与えられた” <literal>hibernate.connnection</literal> ”
+ プロパティ名によって与えられます。例えば、 <literal>charSet</literal> を設定したい場合は、
+ <literal>hibernate.connection.charSet</literal> を使います。
</para>
<para>
- JDBC�R�l�N�V������擾����헪���Ǝ��̃v���O�C�����`����ꍇ�́A
- <literal>org.hibernate.connection.ConnectionProvider</literal> �C���^�[�t�F�C�X��
- �������Ă��������B�����āA�����N���X�� <literal>hibernate.connection.provider_class</literal>
- �ɐݒ肵�Ă��������B
+ JDBCコネクションを取得する戦略を持つ独自のプラグインを定義する場合は、
+ <literal>org.hibernate.connection.ConnectionProvider</literal> インターフェイスを
+ 実装してください。そして、実装クラスを <literal>hibernate.connection.provider_class</literal>
+ に設定してください。
</para>
</sect1>
<sect1 id="configuration-optional" revision="1">
- <title>�I�v�V�����ݒ�v���p�e�B</title>
+ <title>オプション設定プロパティ</title>
<para>
- �����̃v���p�e�B��Hibernate�̋����𐧌䂷���̂ł��B
- �����̃v���p�e�B�͂��ׂđÓ��ȃf�t�H���g�l������A�C�ӂŐݒ肵�܂��B
+ これらのプロパティはHibernateの挙動を制御するものです。
+ これらのプロパティはすべて妥当なデフォルト値があり、任意で設定します。
</para>
<para>
- <emphasis>���ӁF�����̃v���p�e�B��"�V�X�e�����x��"�݂̂ł��B</emphasis>
- �V�X�e�����x���v���p�e�B�� <literal>java -Dproperty=value</literal> �A�������
- <literal>hibernate.properties</literal> �ł̂ݐݒ�\�ł��B
- ����ȊO�̐ݒ���@�� <emphasis>����܂���</emphasis> �B
+ <emphasis>注意:これらのプロパティは"システムレベル"のみです。</emphasis>
+ システムレベルプロパティは <literal>java -Dproperty=value</literal> 、もしくは
+ <literal>hibernate.properties</literal> でのみ設定可能です。
+ それ以外の設定方法は <emphasis>ありません</emphasis> 。
</para>
<table frame="topbot" id="configuration-optional-properties" revision="8">
- <title>Hibernate�ݒ�v���p�e�B</title>
+ <title>Hibernate設定プロパティ</title>
<tgroup cols="2">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="1*"/>
<thead>
<row>
- <entry>�v���p�e�B��</entry>
- <entry>�Ӗ�</entry>
+ <entry>プロパティ名</entry>
+ <entry>意味</entry>
</row>
</thead>
<tbody>
@@ -363,10 +365,10 @@
<literal>hibernate.dialect</literal>
</entry>
<entry>
- Hibernate <literal>Dialect</literal> �N���X��������܂��B
- ����̓����[�V���i���f�[�^�x�[�X���ƂɍœK�����ꂽSQL�����܂��B
+ Hibernate <literal>Dialect</literal> クラス名が入ります。
+ これはリレーショナルデータベースごとに最適化されたSQLを生成します。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>full.classname.of.Dialect</literal>
</para>
</entry>
@@ -376,11 +378,11 @@
<literal>hibernate.show_sql</literal>
</entry>
<entry>
- ���s���ꂽ���ׂĂ�SQL��R���\�[���ɏo�͂��܂��B
- ����̓��O�J�e�S���� <literal>org.hibernate.SQL</literal>
- �� <literal>debug</literal> ��ݒ肷����@�̑�֎�i�ł��B
+ 発行されたすべてのSQLをコンソールに出力します。
+ これはログカテゴリの <literal>org.hibernate.SQL</literal>
+ に <literal>debug</literal> を設定する方法の代替手段です。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true</literal> | <literal>false</literal>
</para>
</entry>
@@ -390,9 +392,9 @@
<literal>hibernate.format_sql</literal>
</entry>
<entry>
- ���O�ƃR���\�[����SQL��������\�����܂��B
+ ログとコンソールのSQLを美しく表示します。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true</literal> | <literal>false</literal>
</para>
</entry>
@@ -402,9 +404,9 @@
<literal>hibernate.default_schema</literal>
</entry>
<entry>
- ���������SQL���̃e�[�u���ɐݒ肷��X�L�[�}/�e�[�u���X�y�[�X�ł��B
+ 生成されるSQL文のテーブルに設定するスキーマ/テーブルスペースです。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>SCHEMA_NAME</literal>
</para>
</entry>
@@ -414,9 +416,9 @@
<literal>hibernate.default_catalog</literal>
</entry>
<entry>
- ���������SQL���̃e�[�u���ɐݒ肷��J�^���O�ł��B
+ 生成されるSQL文のテーブルに設定するカタログです。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>CATALOG_NAME</literal>
</para>
</entry>
@@ -426,9 +428,9 @@
<literal>hibernate.session_factory_name</literal>
</entry>
<entry>
- <literal>SessionFactory</literal> �͐�����A���̖��O��JNDI�ɓo�^����܂��B
+ <literal>SessionFactory</literal> は生成後、この名前でJNDIに登録されます。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>jndi/composite/name</literal>
</para>
</entry>
@@ -438,12 +440,12 @@
<literal>hibernate.max_fetch_depth</literal>
</entry>
<entry>
- �O�������t�F�b�`�̍ő�[�x��ݒ肵�܂��B��������֘A��
- �Έ�֘A�̂݁i��Έ�A���Έ�j�ł��B
- <literal>0</literal> ��w�肷��ƊO�������t�F�b�`�͖����ɂȂ�܂��B
+ 外部結合フェッチの最大深度を設定します。結合する関連は
+ 対一関連のみ(一対一、多対一)です。
+ <literal>0</literal> を指定すると外部結合フェッチは無効になります。
<para>
- <emphasis role="strong">��F</emphasis>
- ��������l�� <literal>0</literal> ���� <literal>3</literal> �ł��B
+ <emphasis role="strong">例:</emphasis>
+ 推奨する値は <literal>0</literal> から <literal>3</literal> です。
</para>
</entry>
</row>
@@ -452,10 +454,10 @@
<literal>hibernate.default_batch_fetch_size</literal>
</entry>
<entry>
- �֘A�t�F�b�`�̃f�t�H���g�o�b�`�T�C�Y��w�肵�܂��B
+ 関連フェッチのデフォルトバッチサイズを指定します。
<para>
- <emphasis role="strong">��F</emphasis>
- ��������l�� <literal>4</literal> , <literal>8</literal> , <literal>16</literal> �ł��B
+ <emphasis role="strong">例:</emphasis>
+ 推奨する値は <literal>4</literal> , <literal>8</literal> , <literal>16</literal> です。
</para>
</entry>
</row>
@@ -464,8 +466,8 @@
<literal>hibernate.default_entity_mode</literal>
</entry>
<entry>
- <literal>SessionFactory</literal> ����Z�b�V������I�[�v�������Ƃ���
- �g�p����G���e�B�e�B�̃f�t�H���g���[�h��ݒ肵�܂��B
+ <literal>SessionFactory</literal> からセッションをオープンしたときに
+ 使用するエンティティのデフォルトモードを設定します。
<para>
<literal>dynamic-map</literal>, <literal>dom4j</literal>,
<literal>pojo</literal>
@@ -477,10 +479,10 @@
<literal>hibernate.order_updates</literal>
</entry>
<entry>
- ���ڂ��X�V���ꂽ�Ƃ��ɁA�ʂ�SQL�Ŏ�L�[��X�V���邱�Ƃ������܂��B
- ���̏ꍇ�A�������s�\�ȃV�X�e���ł́A�܂�Ƀf�b�h���b�N����������\��������܂��B
+ 項目が更新されたときに、別のSQLで主キーを更新することを強制します。
+ この場合、同時実行可能なシステムでは、まれにデッドロックが発生する可能性があります。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true</literal> | <literal>false</literal>
</para>
</entry>
@@ -490,10 +492,10 @@
<literal>hibernate.generate_statistics</literal>
</entry>
<entry>
- �L���̏ꍇ�AHibernate�̓p�t�H�[�}���X�`���[�j���O��
- �L���ȓ��v������W���܂��B
+ 有効の場合、Hibernateはパフォーマンスチューニングに
+ 有効な統計情報を収集します。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true</literal> | <literal>false</literal>
</para>
</entry>
@@ -503,10 +505,10 @@
<literal>hibernate.use_identifer_rollback</literal>
</entry>
<entry>
- �L���̏ꍇ�A�I�u�W�F�N�g���폜���ꂽ�Ƃ���
- ���ʎq�v���p�e�B���Z�b�g���A�f�t�H���g�l�ɂ�����̂����܂��B
+ 有効の場合、オブジェクトが削除されたときに
+ 識別子プロパティをリセットし、デフォルト値にしたものを生成します。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true</literal> | <literal>false</literal>
</para>
</entry>
@@ -516,10 +518,10 @@
<literal>hibernate.use_sql_comments</literal>
</entry>
<entry>
- �L���̏ꍇ�ASQL��ɃR�����g�����܂��B����̓f�o�b�N��e�Ղɂ��܂��B
- �f�t�H���g�̒l�� <literal>false</literal> �ł��B
+ 有効の場合、SQL内にコメントを生成します。これはデバックを容易にします。
+ デフォルトの値は <literal>false</literal> です。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true</literal> | <literal>false</literal>
</para>
</entry>
@@ -529,14 +531,14 @@
</table>
<table frame="topbot" id="configuration-jdbc-properties" revision="8">
- <title>Hibernate JDBC �ƃR�l�N�V�����v���p�e�B</title>
+ <title>Hibernate JDBC とコネクションプロパティ</title>
<tgroup cols="2">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="1*"/>
<thead>
<row>
- <entry>�v���p�e�B��</entry>
- <entry>�Ӗ�</entry>
+ <entry>プロパティ名</entry>
+ <entry>意味</entry>
</row>
</thead>
<tbody>
@@ -545,8 +547,8 @@
<literal>hibernate.jdbc.fetch_size</literal>
</entry>
<entry>
- �l��0�łȂ��ꍇ�AJDBC�t�F�b�`�T�C�Y���肵�܂�
- ( <literal>Statement.setFetchSize()</literal> ��Ăт܂�)�B
+ 値が0でない場合、JDBCフェッチサイズを決定します
+ ( <literal>Statement.setFetchSize()</literal> を呼びます)。
</entry>
</row>
<row>
@@ -554,10 +556,10 @@
<literal>hibernate.jdbc.batch_size</literal>
</entry>
<entry>
- �l��0�łȂ��ꍇ�AHibernate��JDBC2�o�b�`�X�V��g�p���܂��B
+ 値が0でない場合、HibernateがJDBC2バッチ更新を使用します。
<para>
- <emphasis role="strong">��F</emphasis>
- ��������l�� <literal>5</literal> ���� <literal>30</literal> �ł��B
+ <emphasis role="strong">例:</emphasis>
+ 推奨する値は <literal>5</literal> から <literal>30</literal> です。
</para>
</entry>
</row>
@@ -566,13 +568,13 @@
<literal>hibernate.jdbc.batch_versioned_data</literal>
</entry>
<entry>
- ���JDBC�h���C�o�� <literal>executeBatch()</literal> �ɂ���Đ��m�ȍs����
- �Ԃ��ꍇ�A���̃v���p�e�B�� <literal>true</literal> �ɂ��Ă�������
- �i�ʏ�͂��̃I�v�V������ON�ɂ��܂��j�B
- Hibernate�́A�����o�[�W�����f�[�^�̂��߃o�b�`DML��g���܂��B
- �f�t�H���g�̒l�� <literal>false</literal> �ł��B
+ もしJDBCドライバが <literal>executeBatch()</literal> によって正確な行数を
+ 返す場合、このプロパティを <literal>true</literal> にしてください
+ (通常はこのオプションをONにします)。
+ Hibernateは、自動バージョンデータのためバッチDMLを使います。
+ デフォルトの値は <literal>false</literal> です。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true</literal> | <literal>false</literal>
</para>
</entry>
@@ -582,10 +584,10 @@
<literal>hibernate.jdbc.factory_class</literal>
</entry>
<entry>
- �J�X�^�� <literal>Batcher</literal> ��I�т܂��B
- �قƂ�ǂ̃A�v���P�[�V�����ɁA���̐ݒ�͕K�v����܂���B
+ カスタム <literal>Batcher</literal> を選びます。
+ ほとんどのアプリケーションに、この設定は必要ありません。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>classname.of.BatcherFactory</literal>
</para>
</entry>
@@ -595,11 +597,11 @@
<literal>hibernate.jdbc.use_scrollable_resultset</literal>
</entry>
<entry>
- �X�N���[���\�ȃ��U���g�Z�b�g��AHibernate���g�p���܂��B
- ���̃v���p�e�B�́AJDBC�R�l�N�V�������R�l�N�V�������^�f�[�^��
- �T�|�[�g���Ă��邱�Ƃ��K�{���ɂȂ�܂��B
+ スクロール可能なリザルトセットを、Hibernateが使用します。
+ このプロパティは、JDBCコネクションがコネクションメタデータを
+ サポートしていることが必須条件になります。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true</literal> | <literal>false</literal>
</para>
</entry>
@@ -609,10 +611,10 @@
<literal>hibernate.jdbc.use_streams_for_binary</literal>
</entry>
<entry>
- JDBC��/���� <literal>binary</literal> �� <literal>serializable</literal>
- �̏�������/�ǂݍ��݃X�g���[����g���܂�(�V�X�e�����x���̃v���p�e�B)�B
+ JDBCへ/から <literal>binary</literal> や <literal>serializable</literal>
+ の書き込み/読み込みストリームを使います(システムレベルのプロパティ)。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true</literal> | <literal>false</literal>
</para>
</entry>
@@ -622,13 +624,13 @@
<literal>hibernate.jdbc.use_get_generated_keys</literal>
</entry>
<entry>
- �}���̌�Ɏ����������ꂽ��L�[��擾���邽�߂�
- JDBC3 <literal>PreparedStatement.getGeneratedKeys()</literal> �̎g�p��L���ɂ��܂��B
- �����JDBC3+�h���C�o��JRE1.4+��K�v�Ƃ��A
- ���Hibernate�̎��ʎq�W�F�l���[�^�ɖ�肪��������悤�Ȃ�false�ɐݒ肵�Ă��������B
- �f�t�H���g�ł̓R�l�N�V�������^�f�[�^��g���h���C�o�̔\�͂��肵�܂��B
+ 挿入の後に自動生成された主キーを取得するための
+ JDBC3 <literal>PreparedStatement.getGeneratedKeys()</literal> の使用を有効にします。
+ これはJDBC3+ドライバとJRE1.4+を必要とし、
+ もしHibernateの識別子ジェネレータに問題が発生するようならfalseに設定してください。
+ デフォルトではコネクションメタデータを使いドライバの能力を決定します。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true|false</literal>
</para>
</entry>
@@ -638,10 +640,10 @@
<literal>hibernate.connection.provider_class</literal>
</entry>
<entry>
- JDBC�R�l�N�V������Hibernate�ɒ���Ǝ��� <literal>ConnectionProvider</literal> ��
- ���O��w�肵�܂��B
+ JDBCコネクションをHibernateに提供する独自の <literal>ConnectionProvider</literal> の
+ 名前を指定します。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>classname.of.ConnectionProvider</literal>
</para>
</entry>
@@ -651,11 +653,11 @@
<literal>hibernate.connection.isolation</literal>
</entry>
<entry>
- JDBC�g�����U�N�V�����������x����ݒ肵�܂��B
- �Ó��Ȓl�ׂ邽�߂ɂ� <literal>java.sql.Connection</literal> ��`�F�b�N���Ă��������B
- �������g�p����f�[�^�x�[�X���A���ׂĂ̕������x����T�|�[�g���Ă���Ƃ͌���܂���B
+ JDBCトランザクション分離レベルを設定します。
+ 妥当な値を調べるためには <literal>java.sql.Connection</literal> をチェックしてください。
+ しかし使用するデータベースが、すべての分離レベルをサポートしているとは限りません。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>1, 2, 4, 8</literal>
</para>
</entry>
@@ -665,9 +667,9 @@
<literal>hibernate.connection.autocommit</literal>
</entry>
<entry>
- �v�[������Ă���JDBC�R�l�N�V�����̎����R�~�b�g��L���ɂ���i���j�B
+ プールされているJDBCコネクションの自動コミットを有効にする(非推奨)。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true</literal> | <literal>false</literal>
</para>
</entry>
@@ -677,28 +679,28 @@
<literal>hibernate.connection.release_mode</literal>
</entry>
<entry>
- Hibernate��JDBC�R�l�N�V���������[�X���邩��w�肵�܂��B�f�t�H���g�ł�
- �Z�b�V�����������I�ɃN���[�Y�܂��͐ؒf����Ă�R�l�N�V�����͕ێ����܂��B
- �A�v���P�[�V�����T�[�o��JTA�f�[�^�\�[�X�̏ꍇ�A
- ���ׂĂ�JDBC�R�[���̌�A�����I�ɃR�l�N�V���������[�X���邽�߂� <literal>after_statement</literal> ��
- �g�����������B
- ��JTA�R�l�N�V�����̏ꍇ�A�e�g�����U�N�V�������I�������Ƃ��� <literal>after_transaction</literal>
- ��g���A�R�l�N�V���������[�X�����������B
- <literal>auto</literal> �ɂ���ƁA
- JTA��CMT�g�����U�N�V�����̏ꍇ�A <literal>after_statement</literal> �ŃN���[�Y���A
- JDBC�g�����U�N�V�����̏ꍇ�A <literal>after_transaction</literal> �ŃN���[�Y���܂��B
+ 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> でクローズします。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>auto</literal> (default) | <literal>on_close</literal> |
<literal>after_transaction</literal> | <literal>after_statement</literal>
</para>
<para>
- ���ӂ��Ă��������B���̐ݒ�� <literal>SessionFactory.openSession</literal> ����
- �擾���� <literal>Session</literal> �����Ɍ��ʂ�����܂��B
- <literal>SessionFactory.getCurrentSession</literal> ��ʂ��Ď擾����
- <literal>Session</literal> �ł́A<literal>CurrentSessionContext</literal>
- �̎����ɂ���āA�R�l�N�V�����̃����[�X���[�h��ݒ肵�܂��B
- <xref linkend="architecture-current-session"/> ��Q�Ƃ��Ă��������B
+ 注意してください。この設定は <literal>SessionFactory.openSession</literal> から
+ 取得した <literal>Session</literal> だけに効果があります。
+ <literal>SessionFactory.getCurrentSession</literal> を通じて取得した
+ <literal>Session</literal> では、<literal>CurrentSessionContext</literal>
+ の実装によって、コネクションのリリースモードを設定します。
+ <xref linkend="architecture-current-session"/> を参照してください。
</para>
</entry>
</row>
@@ -707,8 +709,8 @@
<literal>hibernate.connection.<emphasis><propertyName></emphasis></literal>
</entry>
<entry>
- JDBC�� <literal>propertyName</literal> �v���p�e�B��A
- <literal>DriverManager.getConnection()</literal> �ɓn���܂��B
+ JDBCの <literal>propertyName</literal> プロパティを、
+ <literal>DriverManager.getConnection()</literal> に渡します。
</entry>
</row>
<row>
@@ -716,8 +718,8 @@
<literal>hibernate.jndi.<emphasis><propertyName></emphasis></literal>
</entry>
<entry>
- <literal>propertyName</literal> �v���p�e�B��A
- JNDI <literal>InitialContextFactory</literal> �ɓn���܂��B
+ <literal>propertyName</literal> プロパティを、
+ JNDI <literal>InitialContextFactory</literal> に渡します。
</entry>
</row>
</tbody>
@@ -725,14 +727,14 @@
</table>
<table frame="topbot" id="configuration-cache-properties" revision="7">
- <title>Hibernate �L���b�V���v���p�e�B</title>
+ <title>Hibernate キャッシュプロパティ</title>
<tgroup cols="2">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="1*"/>
<thead>
<row>
- <entry>�v���p�e�B��</entry>
- <entry>�Ӗ�</entry>
+ <entry>プロパティ名</entry>
+ <entry>意味</entry>
</row>
</thead>
<tbody>
@@ -741,9 +743,9 @@
<literal>hibernate.cache.provider_class</literal>
</entry>
<entry>
- �J�X�^�� <literal>CacheProvider</literal> �̃N���X���ł��B
+ カスタム <literal>CacheProvider</literal> のクラス名です。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>classname.of.CacheProvider</literal>
</para>
</entry>
@@ -753,12 +755,12 @@
<literal>hibernate.cache.use_minimal_puts</literal>
</entry>
<entry>
- �������݂�ŏ����ɂ��邽�߂ɁA�L���b�V���̑����œK�����܂��B
- ���̑���ɁA�ǂݍ��݂����p�ɂɔ�������悤�ɂȂ�܂��B
- ���̃Z�b�e�B���O�̓N���X�^�L���b�V���Ŗ�ɗ����܂��B
- Hibernate3�ł̓N���X�^�L���b�V�������p�Ƀf�t�H���g�ł͗L���ɂȂ��Ă��܂��B
+ 書き込みを最小限にするために、二次キャッシュの操作を最適化します。
+ その代わりに、読み込みがより頻繁に発生するようになります。
+ このセッティングはクラスタキャッシュで役に立ちます。
+ Hibernate3ではクラスタキャッシュ実装用にデフォルトでは有効になっています。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true|false</literal>
</para>
</entry>
@@ -768,9 +770,9 @@
<literal>hibernate.cache.use_query_cache</literal>
</entry>
<entry>
- ����̃N�G�����L���b�V���\�ȏꍇ�ɁA�N�G���L���b�V����L���ɂ��܂��B
+ 特定のクエリがキャッシュ可能な場合に、クエリキャッシュを有効にします。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true|false</literal>
</para>
</entry>
@@ -780,11 +782,11 @@
<literal>hibernate.cache.use_second_level_cache</literal>
</entry>
<entry>
- �L���b�V�����S�ɖ����ɂ���ꍇ�Ɏg���܂��B
- �f�t�H���g�ł͗L���ŁA�N���X�� <literal><cache></literal> �}�b�s���O
- �Ő��䂵�܂��B
+ 二次キャッシュを完全に無効にする場合に使います。
+ デフォルトでは有効で、クラスの <literal><cache></literal> マッピング
+ で制御します。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true|false</literal>
</para>
</entry>
@@ -794,10 +796,10 @@
<literal>hibernate.cache.query_cache_factory</literal>
</entry>
<entry>
- �J�X�^�� <literal>QueryCache</literal> �C���^�[�t�F�C�X�̃N���X����
- �w�肵�܂��B�f�t�H���g�ł� <literal>StandardQueryCache</literal> �ɂȂ�܂��B
+ カスタム <literal>QueryCache</literal> インターフェイスのクラス名を
+ 指定します。デフォルトでは <literal>StandardQueryCache</literal> になります。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>classname.of.QueryCache</literal>
</para>
</entry>
@@ -807,9 +809,9 @@
<literal>hibernate.cache.region_prefix</literal>
</entry>
<entry>
- �L���b�V���̗̈於�̐ړ����ł��B
+ 二次キャッシュの領域名の接頭辞です。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>prefix</literal>
</para>
</entry>
@@ -819,9 +821,9 @@
<literal>hibernate.cache.use_structured_entries</literal>
</entry>
<entry>
- �L���b�V���Ɋi�[����f�[�^��A�l�������₷���t�H�[�}�b�g�ɂ��܂��B
+ 二次キャッシュに格納するデータを、人が理解しやすいフォーマットにします。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true|false</literal>
</para>
</entry>
@@ -831,14 +833,14 @@
</table>
<table frame="topbot" id="configuration-transaction-properties" revision="9">
- <title>Hibernate �g�����U�N�V�����v���p�e�B</title>
+ <title>Hibernate トランザクションプロパティ</title>
<tgroup cols="2">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="1*"/>
<thead>
<row>
- <entry>�v���p�e�B��</entry>
- <entry>�Ӗ�</entry>
+ <entry>プロパティ名</entry>
+ <entry>意味</entry>
</row>
</thead>
<tbody>
@@ -847,11 +849,11 @@
<literal>hibernate.transaction.factory_class</literal>
</entry>
<entry>
- Hibernate <literal>Transaction</literal> API�ƈꏏ�Ɏg����
- <literal>TransactionFactory</literal> �̃N���X���ł��B
- �i�f�t�H���g�ł� <literal>JDBCTransactionFactory</literal> �ł��j�B
+ Hibernate <literal>Transaction</literal> APIと一緒に使われる
+ <literal>TransactionFactory</literal> のクラス名です。
+ (デフォルトでは <literal>JDBCTransactionFactory</literal> です)。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>classname.of.TransactionFactory</literal>
</para>
</entry>
@@ -861,10 +863,10 @@
<literal>jta.UserTransaction</literal>
</entry>
<entry>
- �A�v���P�[�V�����T�[�o����JTA <literal>UserTransaction</literal> ��擾���邽�߂�
- <literal>JTATransactionFactory</literal> �Ɏg����JNDI���ł��B
+ アプリケーションサーバからJTA <literal>UserTransaction</literal> を取得するために
+ <literal>JTATransactionFactory</literal> に使われるJNDI名です。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>jndi/composite/name</literal>
</para>
</entry>
@@ -874,10 +876,10 @@
<literal>hibernate.transaction.manager_lookup_class</literal>
</entry>
<entry>
- <literal>TransactionManagerLookup</literal> �̃N���X���ł��B
- JTA���ɂ����āAJVM���x���̃L���b�V����L���ɂ��邽�߂ɕK�v�ł��B
+ <literal>TransactionManagerLookup</literal> のクラス名です。
+ JTA環境において、JVMレベルのキャッシュを有効にするために必要です。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>classname.of.TransactionManagerLookup</literal>
</para>
</entry>
@@ -887,11 +889,11 @@
<literal>hibernate.transaction.flush_before_completion</literal>
</entry>
<entry>
- �L���̏ꍇ�A�g�����U�N�V������completion�t�F�[�Y�̑O�Ɏ����I��
- �Z�b�V������t���b�V�����܂��B����̎����Z�b�V�����R���e�L�X�g�Ǘ��ɓK���Ă��܂��B
- <xref linkend="architecture-current-session"/>��Q�Ƃ��Ă��������B
+ 有効の場合、トランザクションのcompletionフェーズの前に自動的に
+ セッションをフラッシュします。内臓の自動セッションコンテキスト管理に適しています。
+ <xref linkend="architecture-current-session"/>を参照してください。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true</literal> | <literal>false</literal>
</para>
</entry>
@@ -901,11 +903,11 @@
<literal>hibernate.transaction.auto_close_session</literal>
</entry>
<entry>
- �L���̏ꍇ�A�g�����U�N�V������completion�t�F�[�Y�̌��
- �Z�b�V���������I�ɃN���[�Y���܂��B����̎����Z�b�V�����R���e�L�X�g�Ǘ��ɓK���Ă��܂��B
- <xref linkend="architecture-current-session"/>��Q�Ƃ��Ă��������B
+ 有効の場合、トランザクションのcompletionフェーズの後に
+ セッションを自動的にクローズします。内臓の自動セッションコンテキスト管理に適しています。
+ <xref linkend="architecture-current-session"/>を参照してください。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true</literal> | <literal>false</literal>
</para>
</entry>
@@ -915,14 +917,14 @@
</table>
<table frame="topbot" id="configuration-misc-properties" revision="10">
- <title>���̑��̃v���p�e�B</title>
+ <title>その他のプロパティ</title>
<tgroup cols="2">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="1*"/>
<thead>
<row>
- <entry>�v���p�e�B��</entry>
- <entry>�Ӗ�</entry>
+ <entry>プロパティ名</entry>
+ <entry>意味</entry>
</row>
</thead>
<tbody>
@@ -931,11 +933,11 @@
<literal>hibernate.current_session_context_class</literal>
</entry>
<entry>
- �u���݂́v<literal>Session</literal> �̂��߂́i�J�X�^���j�헪����܂��B
- �r���g�C���X�g���e�W�[�Ɋւ��邻�̑��̏��ɂ��Ă�
- <xref linkend="architecture-current-session"/>��Q�Ƃ��Ă��������B
+ 「現在の」<literal>Session</literal> のための(カスタム)戦略を提供します。
+ ビルトインストラテジーに関するその他の情報については
+ <xref linkend="architecture-current-session"/>を参照してください。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>jta</literal> | <literal>thread</literal> |
<literal>managed</literal> | <literal>custom.Class</literal>
</para>
@@ -946,9 +948,9 @@
<literal>hibernate.query.factory_class</literal>
</entry>
<entry>
- HQL�p�[�T�[�̎�����I���܂��B
+ HQLパーサーの実装を選択します。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>org.hibernate.hql.ast.ASTQueryTranslatorFactory</literal> or
<literal>org.hibernate.hql.classic.ClassicQueryTranslatorFactory</literal>
</para>
@@ -959,10 +961,10 @@
<literal>hibernate.query.substitutions</literal>
</entry>
<entry>
- HQL��SQL�̃g�[�N����}�b�s���O���܂��B
- �i�Ⴆ�A�g�[�N���͊���e�������ł��j�B
+ HQLとSQLのトークンをマッピングします。
+ (例えば、トークンは関数やリテラル名です)。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC</literal>
</para>
</entry>
@@ -972,12 +974,12 @@
<literal>hibernate.hbm2ddl.auto</literal>
</entry>
<entry>
- <literal>SessionFactory</literal> �������Ƃ��ɁA
- �����I�ɃX�L�[�}DDL��DB�ɏo�͂��܂��B
- <literal>create-drop</literal> �̏ꍇ�A <literal>SessionFactory</literal> ��
- �N���[�Y�����Ƃ��ɁA�f�[�^�x�[�X�X�L�[�}��h���b�v���܂��B
+ <literal>SessionFactory</literal> を生成したときに、
+ 自動的にスキーマDDLをDBに出力します。
+ <literal>create-drop</literal> の場合、 <literal>SessionFactory</literal> を
+ クローズしたときに、データベーススキーマをドロップします。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>validate</literal> | <literal>update</literal> |
<literal>create</literal> | <literal>create-drop</literal>
</para>
@@ -988,14 +990,14 @@
<literal>hibernate.cglib.use_reflection_optimizer</literal>
</entry>
<entry>
- ���s�����t���N�V�����̑����CGLIB�̎g�p��L���ɂ��܂�
- �i�V�X�e�����x���̃v���p�e�B�j
- ���t���N�V�����̓g���u���V���[�e�B���O�̂Ƃ��ɖ𗧂��Ƃ�����܂��B
- �I�v�e�B�}�C�U��I�t�ɂ��Ă���Ƃ��ł����A
- Hibernate�ɂ͕K��CGLIB���K�v�Ȃ��Ƃɒ��ӂ��Ă��������B
- ���̃v���p�e�B�� <literal>hibernate.cfg.xml</literal> �Őݒ�ł��܂���B
+ 実行時リフレクションの代わりのCGLIBの使用を有効にします
+ (システムレベルのプロパティ)
+ リフレクションはトラブルシューティングのときに役立つことがあります。
+ オプティマイザをオフにしているときでさえ、
+ Hibernateには必ずCGLIBが必要なことに注意してください。
+ このプロパティは <literal>hibernate.cfg.xml</literal> で設定できません。
<para>
- <emphasis role="strong">��F</emphasis>
+ <emphasis role="strong">例:</emphasis>
<literal>true</literal> | <literal>false</literal>
</para>
</entry>
@@ -1005,15 +1007,15 @@
</table>
<sect2 id="configuration-optional-dialects" revision="1">
- <title>SQL �����iDialect�j</title>
+ <title>SQL 方言(Dialect)</title>
<para>
- <literal>hibernate.dialect</literal> �v���p�e�B�ɂ́A
- �g�p����f�[�^�x�[�X�̐����� <literal>org.hibernate.dialect.Dialect</literal> �̃T�u�N���X��A
- �K���w�肷�ׂ��ł��B
- ������������w�肷��AHibernate�͏�q�����v���p�e�B�̂������ɂ��āA
- ���K�ȃf�t�H���g�l��g���܂��B
- ��������A��������ƂŐݒ肷���Ԃ��Ȃ��܂��B
+ <literal>hibernate.dialect</literal> プロパティには、
+ 使用するデータベースの正しい <literal>org.hibernate.dialect.Dialect</literal> のサブクラスを、
+ 必ず指定すべきです。
+ しかし方言を指定すれば、Hibernateは上述したプロパティのいくつかについて、
+ より適切なデフォルト値を使います。
+ そうすれば、それらを手作業で設定する手間が省けます。
</para>
<table frame="topbot" id="sql-dialects" revision="2">
@@ -1101,21 +1103,21 @@
</sect2>
<sect2 id="configuration-optional-outerjoin" revision="4">
- <title>�O�������t�F�b�`</title>
+ <title>外部結合フェッチ</title>
<para>
- ���DB��ANSI���AOracle��Sybase�X�^�C���̊O��������T�|�[�g���Ă���ꍇ�A
- <emphasis>outer join fetching</emphasis> �́ADB��SQL���s��ߖ�
- �p�t�H�[�}���X��ǂ����܂��B�iDB��ł�葽���̏����R�X�g���������܂��j
- �O�������t�F�b�`�́A���Έ�A��Α��A���Α��A��Έ�̃I�u�W�F�N�g�֘A��
- �O���[�v�I�u�W�F�N�g��1��SQL�� <literal>SELECT</literal> ���܂��B
+ もしDBがANSIか、OracleかSybaseスタイルの外部結合をサポートしている場合、
+ <emphasis>outer join fetching</emphasis> は、DBのSQL発行回数を節約し
+ パフォーマンスを良くします。(DB内でより多くの処理コストが発生します)
+ 外部結合フェッチは、多対一、一対多、多対多、一対一のオブジェクト関連で
+ グループオブジェクトを1つのSQLで <literal>SELECT</literal> します。
</para>
<para>
- <literal>hibernate.max_fetch_depth</literal> �v���p�e�B�̒l�� <literal>0</literal> �ɂ����
- Outer join fetching�� <emphasis>���ׂ�</emphasis> �����ɂ��邱�ƂɂȂ�܂��B
- <literal>1</literal> �₻��ȏ�̒l��ݒ肷��ƁA�O�������t�F�b�`���L���ɂȂ�A
- ��Έ�Ƒ��Έ�֘A�� <literal>fetch="join"</literal> �Ƃ��ă}�b�s���O����܂��B
+ <literal>hibernate.max_fetch_depth</literal> プロパティの値を <literal>0</literal> にすると
+ Outer join fetchingを <emphasis>すべて</emphasis> 無効にすることになります。
+ <literal>1</literal> やそれ以上の値を設定すると、外部結合フェッチが有効になり、
+ 一対一と多対一関連が <literal>fetch="join"</literal> としてマッピングされます。
</para>
<para>
@@ -1125,146 +1127,146 @@
</sect2>
<sect2 id="configuration-optional-binarystreams" revision="1">
- <title>�o�C�i���X�g���[��</title>
+ <title>バイナリストリーム</title>
<para>
- Oracle��JDBC�h���C�o�Ƃ̊Ԃł��Ƃ肳��� <literal>byte</literal> �z��̃T�C�Y�𐧌����܂��B
- <literal>binary</literal> �� <literal>serializable</literal> �^�̑傫�ȃC���X�^���X��g��������A
- <literal>hibernate.jdbc.use_streams_for_binary</literal> ��L���ɂ��Ă��������B
- ������ <emphasis>����̓V�X�e�����x���̐ݒ肾���ł�</emphasis> �B
+ OracleはJDBCドライバとの間でやりとりされる <literal>byte</literal> 配列のサイズを制限します。
+ <literal>binary</literal> や <literal>serializable</literal> 型の大きなインスタンスを使いたければ、
+ <literal>hibernate.jdbc.use_streams_for_binary</literal> を有効にしてください。
+ ただし <emphasis>これはシステムレベルの設定だけです</emphasis> 。
</para>
</sect2>
<sect2 id="configuration-optional-cacheprovider" revision="2">
- <title>2���L���b�V���ƃN�G���[�L���b�V��</title>
+ <title>2次キャッシュとクエリーキャッシュ</title>
<para>
- <literal>hibernate.cache</literal> �v���p�e�B�ړ�����
- Hibernate�Ńv���Z�X��N���X�^�L���b�V����g���Ƃ��Ƃ����܂��B
- <xref linkend="performance-cache"/>�ɂ�葽���̏ڍׂ�����܂��B
+ <literal>hibernate.cache</literal> プロパティ接頭辞は
+ Hibernateでプロセスやクラスタ二次キャッシュを使うとことを許可します。
+ <xref linkend="performance-cache"/>により多くの詳細があります。
</para>
</sect2>
<sect2 id="configuration-optional-querysubstitution">
- <title>�N�G���[����̒u������</title>
+ <title>クエリー言語の置き換え</title>
<para>
- <literal>hibernate.query.substitutions</literal> ��g�����ƂŁA
- �V����Hibernate�N�G���g�[�N�����`�ł��܂��B
- ��F
+ <literal>hibernate.query.substitutions</literal> を使うことで、
+ 新しいHibernateクエリトークンを定義できます。
+ 例:
</para>
<programlisting>hibernate.query.substitutions true=1, false=0</programlisting>
<para>
- ����̓g�[�N�� <literal>true</literal> �� <literal>false</literal> ��A
- ���������SQL�ɂ����Đ������e�����ɖ|�܂��B
+ これはトークン <literal>true</literal> と <literal>false</literal> を、
+ 生成されるSQLにおいて整数リテラルに翻訳します。
</para>
<programlisting>hibernate.query.substitutions toLowercase=LOWER</programlisting>
<para>
- �����SQL�� <literal>LOWER</literal> ���̖��O�̕t���ւ���\�ɂ��܂��B
+ これはSQLの <literal>LOWER</literal> 関数の名前の付け替えを可能にします。
</para>
</sect2>
<sect2 id="configuration-optional-statistics" revision="2">
- <title>Hibernate ���v</title>
+ <title>Hibernate 統計</title>
<para>
- <literal>hibernate.generate_statistics</literal> ��L���ɂ����ꍇ�A
- ���삵�Ă���V�X�e����`���[�j���O����Ƃ��ɁA<literal>SessionFactory.getStatistics()</literal>
- ��o�R���āAHibernate�͕֗��ȓ��v����o�͂��܂��B
- JMX��o�R���ē��v����o�͂��邱�Ƃ�\�ł��B
- Javadoc�� <literal>org.hibernate.stats</literal> �p�b�P�[�W���
- �C���^�[�t�F�C�X�ɂ͂�葽���̏����܂��B
+ <literal>hibernate.generate_statistics</literal> を有効にした場合、
+ 動作しているシステムをチューニングするときに、<literal>SessionFactory.getStatistics()</literal>
+ を経由して、Hibernateは便利な統計情報を出力します。
+ JMXを経由して統計情報を出力することも可能です。
+ Javadocの <literal>org.hibernate.stats</literal> パッケージ内の
+ インターフェイスにはより多くの情報があります。
</para>
</sect2>
</sect1>
<sect1 id="configuration-logging">
- <title>���M���O</title>
+ <title>ロギング</title>
<para>
- Hibernate��Apache commons-loggin��g���āA���܂��܂ȃC�x���g���O�Ƃ���
- �o�͂��܂��B
+ HibernateはApache commons-logginを使って、さまざまなイベントをログとして
+ 出力します。
</para>
<para>
- commons-logging�T�[�r�X�́i�N���X�p�X�� <literal>log4j.jar</literal> ��܂߂�jApache Log4j�ɁA
- �܂��iJDK1.4������ȏ�Ŏ��s������jJDK1.4 logging�ɒ��ڏo�͂��܂��B
- Log4j�� <literal>http://jakarta.apache.org</literal> ����_�E�����[�h�ł��܂��B
- Log4j��g�����߂ɂ́A�N���X�p�X�� <literal>log4j.properties</literal> �t�@�C����z�u����K�v������܂��B
- ��̃v���p�e�B�t�@�C����Hibernate�ƈꏏ�ɔz�z����A����� <literal>src/</literal> �f�B���N�g���ɂ���܂��B
+ 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> ディレクトリにあります。
</para>
<para>
- Hibernate�̃��O���b�Z�[�W�Ɋ���邱�Ƃ����������߂��܂��B
- Hibernate�̃��O�͓ǂ݂₷���A�ł������ڍׂɂȂ�悤�ɓw�͂���Ă��܂��B
- ����͕K�{�̃g���u���V���[�e�B���O�f�o�C�X�ł��B
- �ȉ��ɏd�v�ȃ��O�̃J�e�S�������܂��B
+ Hibernateのログメッセージに慣れることを強くおすすめします。
+ Hibernateのログは読みやすく、できる限り詳細になるように努力されています。
+ これは必須のトラブルシューティングデバイスです。
+ 以下に重要なログのカテゴリを示します。
</para>
<table frame="topbot" id="log-categories" revision="2">
- <title>Hibernate ���O�J�e�S��</title>
+ <title>Hibernate ログカテゴリ</title>
<tgroup cols="2">
<colspec colwidth="1*"/>
<colspec colwidth="2.5*"/>
<thead>
<row>
- <entry>�J�e�S��</entry>
- <entry>�@�\</entry>
+ <entry>カテゴリ</entry>
+ <entry>機能</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>org.hibernate.SQL</literal></entry>
- <entry>���s�������ׂĂ�SQL�iDDL�j�X�e�[�g�����g���M���O���܂��B</entry>
+ <entry>実行したすべてのSQL(DDL)ステートメントをロギングします。</entry>
</row>
<row>
<entry><literal>org.hibernate.type</literal></entry>
- <entry>���ׂĂ�JDBC�p�����[�^���M���O���܂��B</entry>
+ <entry>すべてのJDBCパラメータをロギングします。</entry>
</row>
<row>
<entry><literal>org.hibernate.tool.hbm2ddl</literal></entry>
- <entry>���s�������ׂĂ�SQL�iDDL�j�X�e�[�g�����g���M���O���܂��B</entry>
+ <entry>実行したすべてのSQL(DDL)ステートメントをロギングします。</entry>
</row>
<row>
<entry><literal>org.hibernate.pretty</literal></entry>
<entry>
- session�Ɋ֘A���邷�ׂẴG���e�B�e�B�i�ő�Q�O�j�̃t���b�V�����Ԃ��M���O���܂��B
+ sessionに関連するすべてのエンティティ(最大20)のフラッシュ時間をロギングします。
</entry>
</row>
<row>
<entry><literal>org.hibernate.cache</literal></entry>
- <entry>���ׂĂ̂Q���L���b�V���̓�����M���O���܂��B</entry>
+ <entry>すべての2次キャッシュの動作をロギングします。</entry>
</row>
<row>
<entry><literal>org.hibernate.transaction</literal></entry>
- <entry>�g�����U�N�V�����Ɋ֘A���铮����M���O���܂��B</entry>
+ <entry>トランザクションに関連する動作をロギングします。</entry>
</row>
<row>
<entry><literal>org.hibernate.jdbc</literal></entry>
- <entry>JDBC���\�[�X�擾���M���O���܂��B</entry>
+ <entry>JDBCリソース取得をロギングします。</entry>
</row>
<row>
<entry><literal>org.hibernate.hql.ast.AST</literal></entry>
<entry>
- HQL��SQL��AST�̃N�G���[�p�[�X���M���O���܂��B
+ HQLとSQLのASTのクエリーパースをロギングします。
</entry>
</row>
<row>
<entry><literal>org.hibernate.secure</literal></entry>
- <entry>���ׂĂ�JAAS���͂��M���O���܂��B</entry>
+ <entry>すべてのJAAS分析をロギングします。</entry>
</row>
<row>
<entry><literal>org.hibernate</literal></entry>
<entry>
- ���ׂĂ��M���O���܂��B�i���ʂɂȂ�܂����A�g���u���V���[�e�B���O�ɂ͕֗��ł��j
+ すべてをロギングします。(情報が大量になりますが、トラブルシューティングには便利です)
</entry>
</row>
</tbody>
@@ -1272,34 +1274,34 @@
</table>
<para>
- Hibernate�ŃA�v���P�[�V������쐬����Ƃ��́A<literal>org.hibernate.SQL</literal>
- �J�e�S���� <literal>debug</literal> ���ɗL���ɂ��Ă������ق����ǂ��ł��傤�B
- ��֕��@�Ƃ��āA<literal>hibernate.show_sql</literal> ��L���ɂ�����@������܂��B
+ Hibernateでアプリケーションを作成するときは、<literal>org.hibernate.SQL</literal>
+ カテゴリの <literal>debug</literal> を常に有効にしておいたほうが良いでしょう。
+ 代替方法として、<literal>hibernate.show_sql</literal> を有効にする方法があります。
</para>
</sect1>
<sect1 id="configuration-namingstrategy">
- <title><literal>NamingStrategy</literal> �̎���</title>
+ <title><literal>NamingStrategy</literal> の実装</title>
<para>
- �C���^�[�t�F�C�X <literal>net.sf.hibernate.cfg.NamingStrategy</literal> ��g����
- �f�[�^�x�[�X�I�u�W�F�N�g�ƃX�L�[�}�v�f�̂��߂́u�����W���v��w��ł��܂��B
+ インターフェイス <literal>net.sf.hibernate.cfg.NamingStrategy</literal> を使うと
+ データベースオブジェクトとスキーマ要素のための「命名標準」を指定できます。
</para>
<para>
- Java�̎��ʎq����f�[�^�x�[�X�̎��ʎq�����������邽�߂̃��[����A
- �}�b�s���O�t�@�C���ŗ^�����u�_���I�ȁv�J�����ƃe�[�u��������
- �u�����I�ȁv�e�[�u���ƃJ�����������邽�߂̃��[����p�ӂ��邱�Ƃ��ł��܂��B
- ���̋@�\�͌J��Ԃ��̎G���i�Ⴆ�� <literal>TBL_</literal> �v���t�B�b�N�X�j���菜���A
- �}�b�s���O�h�L�������g�̏璷�����炷���Ƃɖ𗧂��܂��B
- Hibernate���g���f�t�H���g�̐헪�͂��Ȃ�ŏ����ɋ߂���̂ł��B
+ Javaの識別子からデータベースの識別子を自動生成するためのルールや、
+ マッピングファイルで与えた「論理的な」カラムとテーブル名から
+ 「物理的な」テーブルとカラム名を生成するためのルールを用意することができます。
+ この機能は繰り返しの雑音(例えば <literal>TBL_</literal> プリフィックス)を取り除き、
+ マッピングドキュメントの冗長さを減らすことに役立ちます。
+ Hibernateが使うデフォルトの戦略はかなり最小限に近いものです。
</para>
<para>
- �}�b�s���O��lj�����O�� <literal>Configuration.setNamingStrategy()</literal> ��ĂԂ��Ƃ�
- �ȉ��̂悤�ɈقȂ�헪��w�肷�邱�Ƃ��ł��܂��F
+ マッピングを追加する前に <literal>Configuration.setNamingStrategy()</literal> を呼ぶことで
+ 以下のように異なる戦略を指定することができます:
</para>
<programlisting><![CDATA[SessionFactory sf = new Configuration()
@@ -1309,25 +1311,25 @@
.buildSessionFactory();]]></programlisting>
<para>
- <literal>org.hibernate.cfg.ImprovedNamingStrategy</literal> �͑g�ݍ��݂̐헪�ł��B
- ����͂������̃A�v���P�[�V�����ɂƂ��ėL�p�ȊJ�n�_�ƂȂ邩�����܂���B
+ <literal>org.hibernate.cfg.ImprovedNamingStrategy</literal> は組み込みの戦略です。
+ これはいくつかのアプリケーションにとって有用な開始点となるかもしれません。
</para>
</sect1>
<sect1 id="configuration-xmlconfig" revision="2">
- <title>XML�ݒ�t�@�C��</title>
+ <title>XML設定ファイル</title>
<para>
- ���1�̕��@�� <literal>hibernate.cfg.xml</literal> �Ƃ������O�̃t�@�C����
- �\���Ȑݒ��w�肷����@�ł��B
- ���̃t�@�C���� <literal>hibernate.properties</literal> �t�@�C���̑���ƂȂ�܂��B
- ��������̃t�@�C��������A�v���p�e�B���u���������܂��B
+ もう1つの方法は <literal>hibernate.cfg.xml</literal> という名前のファイルで
+ 十分な設定を指定する方法です。
+ このファイルは <literal>hibernate.properties</literal> ファイルの代わりとなります。
+ もし両方のファイルがあれば、プロパティが置き換えられます。
</para>
<para>
- XML�ݒ�t�@�C���͏����ݒ�� <literal>CLASSPATH</literal> �ɔz�u���Ă��������B
- ���ꂪ��ł��F
+ XML設定ファイルは初期設定で <literal>CLASSPATH</literal> に配置してください。
+ これが例です:
</para>
<programlisting><![CDATA[<?xml version='1.0' encoding='utf-8'?>
@@ -1338,7 +1340,7 @@
<hibernate-configuration>
<!-- a SessionFactory instance listed as /jndi/name -->
- <!-- /jndi/name�̂悤�Ƀ��X�g�A�b�v���ꂽSessionFactory�C���X�^���X -->
+ <!-- /jndi/nameのようにリストアップされたSessionFactoryインスタンス -->
<session-factory
name="java:hibernate/SessionFactory">
@@ -1365,22 +1367,22 @@
</hibernate-configuration>]]></programlisting>
<para>
- ���Ă̂Ƃ���A���̕��@�̗D�ʐ��͐ݒ�̂��߂̃}�b�s���O�t�@�C������O�o���ɂł��邱�Ƃł��B
- Hibernate�L���b�V����`���[�j���O���Ȃ���Ȃ�Ȃ��̂ł���A
- <literal>hibernate.cfg.xml</literal> �͂��֗��ł��B
- <literal>hibernate.properties</literal> �� <literal>hibernate.cfg.xml</literal> ��
- �ǂ��炩��g���邱�Ƃ�o���Ă����Ă��������B
- ��͓�����̂ŁA�Ⴄ�Ƃ���Ƃ�����XML�\����g�����Ƃ̗��_�����ł��B
+ 見てのとおり、この方法の優位性は設定のためのマッピングファイル名を外出しにできることです。
+ Hibernateキャッシュをチューニングしなければならないのであれば、
+ <literal>hibernate.cfg.xml</literal> はより便利です。
+ <literal>hibernate.properties</literal> と <literal>hibernate.cfg.xml</literal> の
+ どちらかを使えることを覚えておいてください。
+ 二つは同じもので、違うところといえばXML構文を使うことの利点だけです。
</para>
<para>
- XML�ݒ��g�����ƂŁAHibernate�͈ȉ��̂悤�ɃV���v���ɂȂ�܂��B
+ XML設定を使うことで、Hibernateは以下のようにシンプルになります。
</para>
<programlisting><![CDATA[SessionFactory sf = new Configuration().configure().buildSessionFactory();]]></programlisting>
<para>
- �ႤXML�ݒ�t�@�C����g�����Ƃ�ł��܂��B
+ 違うXML設定ファイルを使うこともできます。
</para>
<programlisting><![CDATA[SessionFactory sf = new Configuration()
@@ -1390,23 +1392,23 @@
</sect1>
<sect1 id="configuration-j2ee" revision="1">
- <title>J2EE�A�v���P�[�V�����T�[�o�Ƃ̓���</title>
+ <title>J2EEアプリケーションサーバとの統合</title>
<para>
- Hibernate��J2EE�\���Ɠ�������|�C���g��T�|�[�g���Ă��܂��B
+ HibernateはJ2EE構造と統合するポイントをサポートしています。
</para>
<itemizedlist>
<listitem>
<para>
- <emphasis>�R���e�i�Ǘ��f�[�^�\�[�X</emphasis>�FHibernate��
- JNDI�����A�R���e�i���Ǘ�����JDBC�R�l�N�V������g�p�ł��܂��B
- �ʏ�AJTA������ <literal>TransactionManager</literal> ��
- <literal>ResourceManager</literal> ���g�����U�N�V�����Ǘ�(CMT)�A
- ���ɗl�X�ȃf�[�^�\�[�X�ɂ܂����镪�U�g�����U�N�V���������܂��B
- ���R�v���O�����Ńg�����U�N�V�������E��w��ł��܂�(BMT)�B
- ���邢�́A�L�q�����R�[�h�̃|�[�^�r���e�B��ۂ��߂ɁA
- �I�v�V������Hibernate�� <literal>Transaction</literal> API��g�������Ȃ邩�����܂���B
+ <emphasis>コンテナ管理データソース</emphasis>:Hibernateは
+ JNDIが提供し、コンテナが管理するJDBCコネクションを使用できます。
+ 通常、JTA準拠の <literal>TransactionManager</literal> と
+ <literal>ResourceManager</literal> がトランザクション管理(CMT)、
+ 特に様々なデータソースにまたがる分散トランザクションを扱います。
+ 当然プログラムでトランザクション境界を指定できます(BMT)。
+ あるいは、記述したコードのポータビリティを保つために、
+ オプションのHibernateの <literal>Transaction</literal> APIを使いたくなるかもしれません。
</para>
</listitem>
</itemizedlist>
@@ -1414,8 +1416,8 @@
<itemizedlist>
<listitem>
<para>
- <emphasis>����JNDI�o�C���f�B���O</emphasis>�FHibernate��JNDI�������オ�������
- <literal>SessionFactory</literal> �����܂��B
+ <emphasis>自動JNDIバインディング</emphasis>:HibernateはJNDIが立ち上がった後に
+ <literal>SessionFactory</literal> を生成します。
</para>
</listitem>
</itemizedlist>
@@ -1423,12 +1425,12 @@
<itemizedlist>
<listitem>
<para>
- <emphasis>JTA�Z�b�V�����o�C���f�B���O</emphasis> �F
- Hibernate <literal>Session</literal> �̃g�����U�N�V�������E��JTA�g�����U�N�V�����Ɠ����ɂȂ�܂��B
- �P���� <literal>SessionFactory</literal> ��JNDI����lookup���āA
- ���݂� <literal>Session</literal> ��擾���܂��B
- JTA�g�����U�N�V���������������Ƃ��ɁAHibernate�� <literal>Session</literal> ��t���b�V�����A�N���[�Y���܂��B
- EJB�f�v���C�����g�f�B�X�N���v�^�̒��ɁA�g�����U�N�V�������E��錾���܂��B
+ <emphasis>JTAセッションバインディング</emphasis> :
+ Hibernate <literal>Session</literal> のトランザクション境界はJTAトランザクションと同じになります。
+ 単純に <literal>SessionFactory</literal> をJNDIからlookupして、
+ 現在の <literal>Session</literal> を取得します。
+ JTAトランザクションが完了したときに、Hibernateが <literal>Session</literal> をフラッシュし、クローズします。
+ EJBデプロイメントディスクリプタの中に、トランザクション境界を宣言します。
</para>
</listitem>
</itemizedlist>
@@ -1436,85 +1438,85 @@
<itemizedlist>
<listitem>
<para>
- <emphasis>JMX�f�v���C:</emphasis> ���JMX���g�p�\�ȃA�v���P�[�V�����T�[�o�i�Ⴆ��JBOSS�j
- ������ꍇ�AHibernate��MBean�Ƃ��ăf�v���C���邱�Ƃ�I�ׂ܂��B
- ����� <literal>Configuration</literal> ���� <literal>SessionFactory</literal> ��
- ��������R�[�h�������Ƃ��ł��܂��B
- �R���e�i�� <literal>HibernateService</literal> ��N�����A
- �T�[�r�X�̈ˑ��𗝑z�I�ɊǗ����܂��i�f�[�^�\�[�X��Hibernate�₻�̑����N������O��
- �g�p�ł���悤�ɂ��Ȃ���Ȃ�܂���j�B
+ <emphasis>JMXデプロイ:</emphasis> もしJMXが使用可能なアプリケーションサーバ(例えばJBOSS)
+ がある場合、HibernateをMBeanとしてデプロイすることを選べます。
+ これは <literal>Configuration</literal> から <literal>SessionFactory</literal> を
+ 生成するコードを無くすことができます。
+ コンテナは <literal>HibernateService</literal> を起動し、
+ サービスの依存を理想的に管理します(データソースはHibernateやその他が起動する前に
+ 使用できるようにしなければなりません)。
</para>
</listitem>
</itemizedlist>
<para>
- ���Ɉˑ����܂����A����A�A�v���P�[�V�����T�[�o��"connection containment"�̗�O��X���[����Ȃ�
- �ݒ�̃I�v�V���� <literal>hibernate.connection.aggressive_release</literal>
- ��true�ɂ��Ă��������B
+ 環境に依存しますが、もし、アプリケーションサーバが"connection containment"の例外をスローするなら
+ 設定のオプション <literal>hibernate.connection.aggressive_release</literal>
+ をtrueにしてください。
</para>
<sect2 id="configuration-optional-transactionstrategy" revision="3">
- <title>�g�����U�N�V�����헪�ݒ�</title>
+ <title>トランザクション戦略設定</title>
<para>
- Hibernate <literal>Session</literal> API�́A�A�[�L�e�N�`����̃V�X�e���̊NJ��ł���
- ������g�����U�N�V�����Ɉˑ����܂���B
- ����R�l�N�V�����v�[����JDBC�ڎg�������ꍇ�AJDBC API����
- �g�����U�N�V������ĂԂ��Ƃ��ł��܂��B
- ����AJ2EE�A�v���P�[�V�����T�[�o�œ��삳����Ȃ�ABean�Ǘ��g�����U�N�V������g���A
- �K�v�ɉ����� <literal>UserTransaction</literal> ��JTA API����ĂԂ��ƂɂȂ�ł��傤�B
+ Hibernate <literal>Session</literal> APIは、アーキテクチャ内のシステムの管轄である
+ あらゆるトランザクションに依存しません。
+ もしコネクションプールのJDBCを直接使いたい場合、JDBC APIから
+ トランザクションを呼ぶことができます。
+ もし、J2EEアプリケーションサーバで動作させるなら、Bean管理トランザクションを使い、
+ 必要に応じて <literal>UserTransaction</literal> をJTA APIから呼ぶことになるでしょう。
</para>
<para>
- 2�i����ȏ�j�̊��Ō݊����̂���R�[�h��ێ����邽�߂ɁA�I�v�V�����Ƃ��č��{�I�ȃV�X�e����
- ���b�s���O����Hibernate <literal>Transaction</literal> API�𐄏����܂��B
- Hibernate�ݒ�v���p�e�B�� <literal>hibernate.transaction.factory_class</literal> ��ݒ肷�邱�Ƃ�
- �������� <literal>Transaction</literal> �N���X�̃C���X�^���X�����Ƃ��ł��܂��B
+ 2つ(それ以上)の環境で互換性のあるコードを維持するために、オプションとして根本的なシステムを
+ ラッピングするHibernate <literal>Transaction</literal> APIを推奨します。
+ Hibernate設定プロパティの <literal>hibernate.transaction.factory_class</literal> を設定することで
+ ある特定の <literal>Transaction</literal> クラスのインスタンスを持つことができます。
</para>
<para>
- 3�̊�{�I�ȁi���ɂ���j�I������܂��F
+ 3つの基本的な(既にある)選択を挙げます:
</para>
<variablelist spacing="compact">
<varlistentry>
<term><literal>org.hibernate.transaction.JDBCTransactionFactory</literal></term>
<listitem>
- <para>�f�[�^�x�[�X(JDBC)�g�����U�N�V�����ɈϏ����܂��i�f�t�H���g�j</para>
+ <para>データベース(JDBC)トランザクションに委譲します(デフォルト)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>org.hibernate.transaction.JTATransactionFactory</literal></term>
<listitem>
<para>
- ����A���̃R���e�L�X�g�i�Ⴆ�AEJB�Z�b�V����Bean���\�b�h�j�Ői�s���̃g�����U�N�V���������݂���A�������
- �V�����g�����U�N�V�������J�n����Ă���ABean�Ǘ��g�����U�N�V�������g���Ă���ꍇ�A
- �R���e�i�Ǘ��g�����U�N�V�����ɈϏ����܂��B
+ もし、このコンテキスト(例えば、EJBセッションBeanメソッド)で進行中のトランザクションが存在する、もしくは
+ 新しいトランザクションが開始されており、Bean管理トランザクションが使われている場合、
+ コンテナ管理トランザクションに委譲します。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>org.hibernate.transaction.CMTTransactionFactory</literal></term>
<listitem>
- <para>�R���e�i�Ǘ�JTA�g�����U�N�V�����ɈϏ����܂�</para>
+ <para>コンテナ管理JTAトランザクションに委譲します</para>
</listitem>
</varlistentry>
</variablelist>
<para>
- �������g�̃g�����U�N�V�����헪�i�Ⴆ�ACORBA�g�����U�N�V�����T�[�r�X�j���`���邱�Ƃ�ł��܂��B
+ 自分自身のトランザクション戦略(例えば、CORBAトランザクションサービス)を定義することもできます。
</para>
<para>
- Hibernate�̂������̋@�\�i�Ⴆ�A�L���b�V���AJTA�ɂ��R���e�L�X�g�Z�b�V���� ���j��
- �Ǘ����ꂽ���̒���JTA <literal>TransactionManager</literal> �ւ̃A�N�Z�X��v�����܂��B
- J2EE���ЂƂ̃��J�j�Y���ɋK�i������Ă��Ȃ��̂ŁA
- �A�v���P�[�V�����T�[�o�ɂ����āAHibernate�� <literal>TransactionManager</literal> �̃��t�@�����X
- ��擾������@�m�ɂ���K�v������܂��B
+ Hibernateのいくつかの機能(例えば、二次キャッシュ、JTAによるコンテキストセッション 等)は
+ 管理された環境の中のJTA <literal>TransactionManager</literal> へのアクセスを要求します。
+ J2EEがひとつのメカニズムに規格化されていないので、
+ アプリケーションサーバにおいて、Hibernateが <literal>TransactionManager</literal> のリファレンス
+ を取得する方法を明確にする必要があります。
</para>
<table frame="topbot" id="jtamanagerlookup" revision="1">
- <title>JTA �g�����U�N�V�����}�l�[�W��</title>
+ <title>JTA トランザクションマネージャ</title>
<tgroup cols="2">
<colspec colwidth="2.5*"/>
<colspec colwidth="1*"/>
@@ -1572,95 +1574,95 @@
</sect2>
<sect2 id="configuration-optional-jndi" revision="3">
- <title><literal>SessionFactory</literal> ��JNDI�ւ̓o�^</title>
+ <title><literal>SessionFactory</literal> のJNDIへの登録</title>
<para>
- JNDI�ɓo�^����Hibernate <literal>SessionFactory</literal> �͒P����
- �t�@�N�g�����b�N�A�b�v���A�V���� <literal>Session</literal> ����܂��B
- �����JNDI�ɓo�^���ꂽ <literal>Datasource</literal> �ɂ͊֘A�����A
- ���݂��ɃV���v���ɂ����̓o�^��g�����Ƃɒ��ӂ��Ă��������B
+ JNDIに登録したHibernate <literal>SessionFactory</literal> は単純に
+ ファクトリをルックアップし、新しい <literal>Session</literal> を作ります。
+ これはJNDIに登録された <literal>Datasource</literal> には関連せず、
+ お互いにシンプルにこれらの登録を使うことに注意してください。
</para>
<para>
- ��� <literal>SessionFactory</literal> ��JNDI�l�[���X�y�[�X�ɓo�^�������ꍇ�A
- ���ʂȖ��O�i�Ⴆ�A <literal>java:hibernate/SessionFactory</literal> �j��
- <literal>hibernate.session_factory_name</literal> �v���p�e�B�Ɏg���Ă�������
- ������̃v���p�e�B��ȗ������ꍇ�A <literal>SessionFactory</literal> ��
- JNDI�ɓo�^����܂���B�i�����Tomcat�̂悤�ȃf�t�H���g������JNDI���ǂ݂���p�̊��̏ꍇ���ɕ֗��ł��B�j
+ もし <literal>SessionFactory</literal> をJNDIネームスペースに登録したい場合、
+ 特別な名前(例えば、 <literal>java:hibernate/SessionFactory</literal> )を
+ <literal>hibernate.session_factory_name</literal> プロパティに使ってください
+ もしこのプロパティを省略した場合、 <literal>SessionFactory</literal> は
+ JNDIに登録されません。(これはTomcatのようなデフォルト実装でJNDIが読みより専用の環境の場合特に便利です。)
</para>
<para>
- <literal>SessionFactory</literal> ��JNDI�ɓo�^����Ƃ��AHibernate��
- <literal>hibernate.jndi.url</literal> �̒l��g�p���A<literal>hibernate.jndi.class</literal>
- ��C�j�V�����R���e�L�X�g�Ƃ��ċ�̉����܂��B
- �������ݒ肵�Ȃ��ꍇ�́A�f�t�H���g�� <literal>InitialContext</literal> ��g�p���܂��B
+ <literal>SessionFactory</literal> をJNDIに登録するとき、Hibernateは
+ <literal>hibernate.jndi.url</literal> の値を使用し、<literal>hibernate.jndi.class</literal>
+ をイニシャルコンテキストとして具体化します。
+ もし何も設定しない場合は、デフォルトの <literal>InitialContext</literal> を使用します。
</para>
<para>
- <literal>cfg.buildSessionFactory()</literal> ��R�[����
- Hibernate�͎����I�� <literal>SessionFactory</literal> ��JNDI�ɔz�u���܂��B
- <literal>HibernateService</literal> �ƈꏏ��JMX�f�v���C�����g��g��Ȃ�����A
- ����͂��̌Ăяo����A�v���P�[�V������̉��炩�̃X�^�[�g�A�b�v�R�[�h�i������̓��[�e�B���e�B�N���X�j
- �ɔz�u���Ȃ���Ȃ�Ȃ����Ƃ�Ӗ����܂��B�i��ŋc�_���܂��j
+ <literal>cfg.buildSessionFactory()</literal> をコール後
+ Hibernateは自動的に <literal>SessionFactory</literal> をJNDIに配置します。
+ <literal>HibernateService</literal> と一緒にJMXデプロイメントを使わない限り、
+ これはこの呼び出しをアプリケーション内の何らかのスタートアップコード(もしくはユーティリティクラス)
+ に配置しなければならないことを意味します。(後で議論します)
</para>
<para>
- ���JNDI <literal>SessionFactory</literal> ��g���ꍇ�AEJB�⑼�̃N���X��
- JNDI���b�N�A�b�v��g���� <literal>SessionFactory</literal> ��擾���܂��B
+ もしJNDI <literal>SessionFactory</literal> を使う場合、EJBや他のクラスは
+ JNDIルックアップを使って <literal>SessionFactory</literal> を取得します。
</para>
<para>
- �Ǘ����ꂽ���ł� <literal>SessionFactory</literal> ��JNDI�Ƀo�C���h���A
- �����łȂ���� <literal>static</literal> �V���O���g����g�����Ƃ𐄏����܂��B
- �����������ڍׂ���A�v���P�[�V�����R�[�h��ی삷�邽�߂ɁA
- <literal>HibernateUtil.getSessionFactory()</literal> �̂悤�ȃw���p�[�N���X�̒��ɁA
- <literal>SessionFactory</literal> ���b�N�A�b�v����R�[�h��B�����Ƃ𐄏����܂��B
- ���̂悤�ȃw���p�[�N���X��Hibernate��J�n����֗��Ȏ�i�ł����܂��B
- —�P�͂�Q�Ƃ��Ă��������B
+ 管理された環境では <literal>SessionFactory</literal> をJNDIにバインドし、
+ そうでなければ <literal>static</literal> シングルトンを使うことを推奨します。
+ こういった詳細からアプリケーションコードを保護するために、
+ <literal>HibernateUtil.getSessionFactory()</literal> のようなヘルパークラスの中に、
+ <literal>SessionFactory</literal> をルックアップするコードを隠すことを推奨します。
+ このようなヘルパークラスはHibernateを開始する便利な手段でもあります。
+ —1章を参照してください。
</para>
</sect2>
<sect2 id="configuration-j2ee-currentsession" revision="4">
- <title>JTA�ɂ�錻�݂̃Z�b�V�����R���e�L�X�g�}�l�[�W�����g</title>
+ <title>JTAによる現在のセッションコンテキストマネージメント</title>
<para>
- ����Ƃ�ȒP�� <literal>Session</literal> �ƃg�����U�N�V�����������@�́A
- Hibernate�������I�Ɂu���݂́v <literal>Session</literal> ��Ǘ����邱�Ƃł��B
- <xref linkend="architecture-current-session">�J�����g�Z�b�V����</xref> �̐����Q�Ƃ��Ă��������B
- ��� <literal>�uJTA�v</literal> �Z�b�V�����R���e�L�X�g��g������ŁA
- ���݂�JTA�g�����U�N�V������Hibernate <literal>Session</literal> ���֘A���Ă��Ȃ��ꍇ�́A
- �ŏ��� <literal>sessionFactory.getCurrentSession()</literal> ��R�[�����A
- JTA�g�����U�N�V�����Ƃ̊֘A�t����s���Ă��������B
- <literal>�uJTA�v</literal> �R���e�L�X�g�� <literal>getCurrentSession()</literal> ��
- �ʂ��Ď擾���� <literal>Session</literal> �́A�g�����U�N�V��������������O��
- �����I�Ƀt���b�V�����A����������ɂ͎����I�ɃN���[�Y���܂��B
- �܂��A�e�X�e�[�g�����g���JDBC�R�l�N�V������ϋɓI�Ƀ����[�X���܂��B
- ����ɂ��JTA�g�����U�N�V�����̃��C�t�T�C�N���� <literal>Session</literal> ��Ǘ����邱�Ƃ��ł��A
- ���[�U�[�̃R�[�h���炻�̂悤�ȊǗ�����R�[�h��r���ł��܂��B
- <literal>UserTransaction</literal> ��ʂ���JTA��v���O�����ŊǗ����邱�Ƃ��ł��܂��B
- �܂��́A�i�|�[�^�u���ȃR�[�h�ł���jHibernate <literal>Transaction</literal> API��
- �g�����U�N�V�������E�Ƃ��Ďg�����Ƃ�ł��܂��B
- EJB�R���e�i��g���Ƃ��́ACMT�ɂ��錾�I�g�����U�N�V�������E���D�܂����ł��B
+ もっとも簡単に <literal>Session</literal> とトランザクションを扱う方法は、
+ Hibernateが自動的に「現在の」 <literal>Session</literal> を管理することです。
+ <xref linkend="architecture-current-session">カレントセッション</xref> の説明を参照してください。
+ もし <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による宣言的トランザクション境界が好ましいです。
</para>
</sect2>
<sect2 id="configuration-j2ee-jmx" revision="1">
- <title>JMX�f�v���C�����g</title>
+ <title>JMXデプロイメント</title>
<para>
- <literal>SessionFactory</literal> ��JNDI����擾���邽�߂ɂ�
- <literal>cfg.buildSessionFactory()</literal> �s��ǂ����Ŏ��s���Ă��Ȃ���Ȃ�܂���B
- ���Ȃ��͂����A<literal>static</literal> �������u���b�N��i <literal>HibernateUtil</literal> �̂悤�ȁj��
- <emphasis>managed service</emphasis> �Ƃ���Hibernate��f�v���C���邩�A�ǂ��炩�Ŏ��s�ł��܂��B
+ <literal>SessionFactory</literal> をJNDIから取得するためには
+ <literal>cfg.buildSessionFactory()</literal> 行をどこかで実行していなければなりません。
+ あなたはこれを、<literal>static</literal> 初期化ブロック内( <literal>HibernateUtil</literal> のような)か
+ <emphasis>managed service</emphasis> としてHibernateをデプロイするか、どちらかで実行できます。
</para>
<para>
- JBOSS�̂悤��JMX�̋@�\�ŃA�v���P�[�V�����T�[�o�Ƀf�v���C���邽�߂�
- <literal>org.hibernate.jmx.HibernateService</literal> ��g���āA�z�u���܂��B
- ���ۂ̃f�v���C�����g�Ɛݒ�̓x���_�[���L�ł��B
- �����ŗ�Ƃ���JBOSS 4.0.x�p�� <literal>jboss-service.xml</literal> �����܂��B
+ JBOSSのようなJMXの機能でアプリケーションサーバにデプロイするために
+ <literal>org.hibernate.jmx.HibernateService</literal> を使って、配置します。
+ 実際のデプロイメントと設定はベンダー特有です。
+ ここで例としてJBOSS 4.0.x用の <literal>jboss-service.xml</literal> を示します。
</para>
<programlisting><![CDATA[<?xml version="1.0"?>
@@ -1707,14 +1709,14 @@
</server>]]></programlisting>
<para>
- ���̃t�@�C���� <literal>META-INF</literal> �f�B���N�g���ɔz�u����A
- JAR�t�@�C����g������ <literal>.sar</literal> (service archive)�Ńp�b�P�[�W������܂��B
- ���l��Hibernate�p�b�P�[�W��K�v�ł��B�܂��AHibernate�̓T�[�h�p�[�e�B�̃��C�u������v�����܂��B
- �R���p�C�������i�����N���X�Ƃ��̃}�b�s���O�t�@�C������l�ɃA�[�J�C�u�i.sar�t�@�C���j�ɓ���܂��B
- �G���^�[�v���C�Ybean�i�ʏ�̓Z�b�V����bean�j�͎��g��JAR�t�@�C����ێ����܂����A
- 1��Łi�z�b�g�j�f�v���C�\�ȃ��j�b�g�̂��߂Ƀ��C���T�[�r�X�A�[�J�C�u�Ƃ��Ă���EJB JAR�t�@�C����C���N���[�h����
- ���Ƃ��ł��܂��BJBoss�A�v���P�[�V�����T�[�o�̃h�L�������g��JXM�T�[�r�X��
- EJB�f�v���C�����g�̂�葽���̏����܂��B
+ このファイルは <literal>META-INF</literal> ディレクトリに配置され、
+ JARファイルを拡張した <literal>.sar</literal> (service archive)でパッケージ化されます。
+ 同様にHibernateパッケージも必要です。また、Hibernateはサードパーティのライブラリも要求します。
+ コンパイルした永続化クラスとそのマッピングファイルも同様にアーカイブ(.sarファイル)に入れます。
+ エンタープライズbean(通常はセッションbean)は自身のJARファイルを保持しますが、
+ 1回で(ホット)デプロイ可能なユニットのためにメインサービスアーカイブとしてこのEJB JARファイルをインクルードする
+ ことができます。JBossアプリケーションサーバのドキュメントにJXMサービスと
+ EJBデプロイメントのより多くの情報があります。
</para>
</sect2>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/events.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/events.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/events.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,31 +1,33 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="events">
- <title>�C���^�[�Z�v�^�ƃC�x���g</title>
+ <title>インターセプタとイベント</title>
<para>
- �A�v���P�[�V������Hibernate�̓���Ŕ�������C�x���g�ɑΉ��ł���Ɩ�ɗ����Ƃ�����܂��B
- �����̈�ʓI�ȋ@�\������ł���悤�ɂȂ�A
- �܂�Hibernate�̋@�\��g�����邱�Ƃ�ł���悤�ɂȂ�܂��B
+ アプリケーションがHibernateの内部で発生するイベントに対応できると役に立つことがあります。
+ ある種の一般的な機能を実装できるようになり、
+ またHibernateの機能を拡張することもできるようになります。
</para>
<sect1 id="objectstate-interceptors" revision="3">
- <title>�C���^�[�Z�v�^</title>
+ <title>インターセプタ</title>
<para>
- <literal>Interceptor</literal> �C���^�[�t�F�C�X��g���āA
- �Z�b�V��������A�v���P�[�V�����փR�[���o�b�N���邱�Ƃ��ł��܂��B
- ����ɂ��i���I�u�W�F�N�g�̕ۑ��A�X�V�A�폜�A�ǂݍ��݂̑O�ɁA
- �A�v���P�[�V�������v���p�e�B���������葀�삵����ł���悤�ɂȂ�܂��B
- ����͊č����̒ǐՂɗ��p�ł��܂��B
- ���̗�� <literal>Interceptor</literal> �� <literal>Auditable</literal>
- ���쐬�����Ǝ����I�� <literal>createTimestamp</literal> ��ݒ肵�A
- <literal>Auditable</literal> ���X�V�����Ǝ����I��
- <literal>lastUpdateTimestamp</literal> �v���p�e�B��X�V���܂��B
+ <literal>Interceptor</literal> インターフェイスを使って、
+ セッションからアプリケーションへコールバックをすることができます。
+ これにより永続オブジェクトの保存、更新、削除、読み込みの前に、
+ アプリケーションがプロパティを検査したり操作したりできるようになります。
+ これは監査情報の追跡に利用できます。
+ 下の例で <literal>Interceptor</literal> は <literal>Auditable</literal>
+ が作成されると自動的に <literal>createTimestamp</literal> を設定し、
+ <literal>Auditable</literal> が更新されると自動的に
+ <literal>lastUpdateTimestamp</literal> プロパティを更新します。
</para>
<para>
- <literal>Interceptor</literal> �ڎ���������A
- �i����ɂ悢�̂́j<literal>EmptyInterceptor</literal> ��g��������ł��܂��B
+ <literal>Interceptor</literal> を直接実装したり、
+ (さらによいのは)<literal>EmptyInterceptor</literal> を拡張したりできます。
</para>
<programlisting><![CDATA[package org.hibernate.test;
@@ -112,30 +114,30 @@
}]]></programlisting>
<para>
- �C���^�[�Z�v�^�ɂ͓��ނ���܂��F
- <literal>Session</literal> �X�R�[�v�̂�̂�
- <literal>SessionFactory</literal> �X�R�[�v�̂�̂ł��B
+ インターセプタには二種類あります:
+ <literal>Session</literal> スコープのものと
+ <literal>SessionFactory</literal> スコープのものです。
</para>
<para>
- <literal>Session</literal> �X�R�[�v�̃C���^�[�Z�v�^�́A
- �Z�b�V������I�[�v������Ƃ��Ɏw�肵�܂��B
- <literal>Interceptor</literal> ������Ɏ��SessionFactory.openSession()
- �̃I�[�o�[���[�h���\�b�h�̈��g���܂��B
+ <literal>Session</literal> スコープのインターセプタは、
+ セッションをオープンするときに指定します。
+ <literal>Interceptor</literal> を引数に取るSessionFactory.openSession()
+ のオーバーロードメソッドの一つを使います。
</para>
<programlisting><![CDATA[Session session = sf.openSession( new AuditInterceptor() );]]></programlisting>
<para>
- <literal>SessionFactory</literal> �X�R�[�v�̃C���^�[�Z�v�^�� <literal>Configuration</literal>
- �I�u�W�F�N�g��g���ēo�^���܂��B
- ����� <literal>SessionFactory</literal> �̍\�z����D�悳��܂��B
- ���̏ꍇ�A�����C���^�[�Z�v�^�� <literal>SessionFactory</literal>
- ����I�[�v�����ꂽ���ׂẴZ�b�V�����ɓK�p����܂��B
- ����͎g�p����C���^�[�Z�v�^���I�Ɏw�肵�ăZ�b�V������I�[�v�����Ȃ�����A�����Ȃ�܂��B
- <literal>SessionFactory</literal> �X�R�[�v�̃C���^�[�Z�v�^�̓X���b�h�Z�[�t�łȂ���Ȃ�܂���B
- �����̃Z�b�V�������i���ݓI�Ɂj���̃C���^�[�Z�v�^�����s�Ŏg�p���邱�ƂɂȂ邽�߁A
- �Z�b�V�����ŗL�̏�Ԃ�i�[���Ȃ��悤�ɋC����Ă��������B
+ <literal>SessionFactory</literal> スコープのインターセプタは <literal>Configuration</literal>
+ オブジェクトを使って登録します。
+ これは <literal>SessionFactory</literal> の構築よりも優先されます。
+ この場合、提供されるインターセプタは <literal>SessionFactory</literal>
+ からオープンされたすべてのセッションに適用されます。
+ これは使用するインターセプタを明示的に指定してセッションをオープンしない限り、そうなります。
+ <literal>SessionFactory</literal> スコープのインターセプタはスレッドセーフでなければなりません。
+ 複数のセッションが(潜在的に)このインターセプタを同時並行で使用することになるため、
+ セッション固有の状態を格納しないように気をつけてください。
</para>
<programlisting><![CDATA[new Configuration().setInterceptor( new AuditInterceptor() );]]></programlisting>
@@ -143,46 +145,46 @@
</sect1>
<sect1 id="objectstate-events" revision="4">
- <title>�C�x���g�V�X�e��</title>
+ <title>イベントシステム</title>
<para>
- �i�����w�œ���̃C�x���g�ɑΉ����Ȃ���Ȃ�Ȃ��ꍇ�A
- Hibernate3�� <emphasis>�C�x���g</emphasis> �A�[�L�e�N�`����g�����Ƃ�ł��܂��B
- �C�x���g�V�X�e���̓C���^�[�Z�v�^�ƈꏏ�Ɏg�����A�܂��̓C���^�[�Z�v�^�̑���Ƃ��Ďg�����Ƃ��ł��܂��B
+ 永続化層で特定のイベントに対応しなければならない場合、
+ Hibernate3の <emphasis>イベント</emphasis> アーキテクチャを使うこともできます。
+ イベントシステムはインターセプタと一緒に使うか、またはインターセプタの代わりとして使うことができます。
</para>
<para>
- �{���I�� <literal>Session</literal> �C���^�[�t�F�C�X�̂��ׂẴ��\�b�h�́A
- 1�̃C�x���g�Ƒ��݂Ɋ֘A���܂��B
- �Ⴆ�� <literal>LoadEvent</literal>�A<literal>FlushEvent</literal> �Ȃǂ�����܂�
- �i��`�ς݂̃C�x���g�^�̈ꗗ�ɂ��ẮAXML�ݒ�t�@�C����DTD��
- <literal>org.hibernate.event</literal> �p�b�P�[�W�ׂĂ��������j�B
- ���N�G�X�g�������̃��\�b�h��1��������Ƃ��A
- Hibernate�� <literal>Session</literal> �͓K�ȃC�x���g�����A
- ���̃C�x���g�^�ɐݒ肳�ꂽ�C�x���g���X�i�ɓn���܂��B
- ���炵�����ƂɁA�����̃��X�i�͂��̃��\�b�h�Ɠ���������������܂��B
- �Ƃ͂����A���X�i�C���^�[�t�F�C�X�̈���R�ɃJ�X�^�������ł��܂�
- �i�܂�A<literal>LoadEvent</literal> �͓o�^���ꂽ <literal>LoadEventListener</literal>
- �C���^�[�t�F�C�X�̎����ɂ�菈������܂��j�B
- ���̏ꍇ�A���̎����ɂ� <literal>Session</literal> ������ꂽ�ǂ̂悤�� <literal>load()</literal>
- ���N�G�X�g����������ӔC������܂��B
+ 本質的に <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>
+ リクエストをも処理する責任があります。
</para>
<para>
- ���X�i�͎�����V���O���g���ł���ƌ��Ȃ��܂��B
- �܂胊�X�i�̓��N�G�X�g�Ԃŋ��L����邽�߁A
- �C���X�^���X�ϐ��Ƃ��ď�Ԃ�ێ�����ׂ��ł͂Ȃ��Ƃ������Ƃł��B
+ リスナは事実上シングルトンであると見なせます。
+ つまりリスナはリクエスト間で共有されるため、
+ インスタンス変数として状態を保持するべきではないということです。
</para>
<para>
- �J�X�^�����X�i�͏����������C�x���g�ɂ��ēK�ȃC���^�[�t�F�C�X���������ׂ��ł��B
- �֗��Ȋ��N���X�̂����̈��p�����Ă�悢�ł�
- �i�܂���Hibernate���f�t�H���g�Ŏg�p����C�x���g���X�i��p�����Ă�悢�ł��B
- ���炵�����ƂɁA���̖ړI�̂��߂ɔ�final�Ƃ��Đ錾����Ă��܂��j�B
- �J�X�^�����X�i�� <literal>Configuration</literal> �I�u�W�F�N�g��g���ăv���O��������o�^���邩�A
- Hibernate��XML�ݒ�t�@�C���Ŏw��ł��܂�
- �i�v���p�e�B�t�@�C���Ő錾�I�ɐݒ肷����@�̓T�|�[�g����Ă��܂���j�B
- �J�X�^�����[�h�C�x���g���X�i�̗�����܂��B
+ カスタムリスナは処理したいイベントについて適切なインターフェイスを実装するべきです。
+ 便利な基底クラスのうちの一つを継承してもよいです
+ (またはHibernateがデフォルトで使用するイベントリスナを継承してもよいです。
+ すばらしいことに、この目的のために非finalとして宣言されています)。
+ カスタムリスナは <literal>Configuration</literal> オブジェクトを使ってプログラムから登録するか、
+ HibernateのXML設定ファイルで指定できます
+ (プロパティファイルで宣言的に設定する方法はサポートされていません)。
+ カスタムロードイベントリスナの例を示します。
</para>
<programlisting><![CDATA[public class MyLoadListener implements LoadEventListener {
@@ -196,7 +198,7 @@
}]]></programlisting>
<para>
- �f�t�H���g���X�i�ȊO�̃��X�i��g���ɂ́AHibernate�ւ̐ݒ��K�v�ł��F
+ デフォルトリスナ以外のリスナを使うには、Hibernateへの設定も必要です:
</para>
<programlisting><![CDATA[<hibernate-configuration>
@@ -210,7 +212,7 @@
</hibernate-configuration>]]></programlisting>
<para>
- �܂����̑��ɁA�v���O�����œo�^������@�����܂��F
+ またその他に、プログラムで登録する方法もあります:
</para>
<programlisting><![CDATA[Configuration cfg = new Configuration();
@@ -218,31 +220,31 @@
cfg.EventListeners().setLoadEventListeners(stack);]]></programlisting>
<para>
- ���X�i��錾�I�ɓo�^����ƁA���̃��X�i�̃C���X�^���X���L�ł��܂���B
- ������ <literal><listener/></literal> �v�f�œ����N���X�����g����ƁA
- ���ꂼ��̎Q�Ƃ͂��̃N���X�̕ʁX�̃C���X�^���X��w�����ƂɂȂ�܂��B
- ���X�i�^�̊ԂŃ��X�i�C���X�^���X���L����K�v������A
- �v���O�����œo�^������@��̂�Ȃ���Ȃ�܂���B
+ リスナを宣言的に登録すると、そのリスナのインスタンスを共有できません。
+ 複数の <literal><listener/></literal> 要素で同じクラス名が使われると、
+ それぞれの参照はそのクラスの別々のインスタンスを指すことになります。
+ リスナ型の間でリスナインスタンスを共有する必要があれば、
+ プログラムで登録する方法を採らなければなりません。
</para>
<para>
- �Ȃ��C���^�[�t�F�C�X��������āA���������^��ݒ莞�Ɏw�肷��̂ł��傤���H
- ���X�i�̎����N���X�ɁA�����̃C�x���g���X�i�C���^�[�t�F�C�X������ł��邩��ł��B
- �o�^���ɒlj��Ō^��w�肷�邱�ƂŁA�J�X�^�����X�i��on/off��ݒ莞�ɊȒP�ɐ�ւ����܂��B
+ なぜインターフェイスを実装して、特化した型を設定時に指定するのでしょうか?
+ リスナの実装クラスに、複数のイベントリスナインターフェイスを実装できるからです。
+ 登録時に追加で型を指定することで、カスタムリスナのon/offを設定時に簡単に切り替えられます。
</para>
</sect1>
<sect1 id="objectstate-decl-security" revision="2">
- <title>Hibernate�̐錾�I�ȃZ�L�����e�B</title>
+ <title>Hibernateの宣言的なセキュリティ</title>
<para>
- ��ʓI��Hibernate�A�v���P�[�V�����̐錾�I�ȃZ�L�����e�B�́A�Z�b�V�����t�@�T�[�h�w�ŊǗ����܂��B
- ���݁AHiberenate3��JACC�ŋ������AJAAS�ŔF�����A�N�V���������Ă��܂��B
- ����̓C�x���g�A�[�L�e�N�`���̍ŏ�ʂɑg�ݍ��܂�Ă���I�v�V�����̋@�\�ł��B
+ 一般的にHibernateアプリケーションの宣言的なセキュリティは、セッションファサード層で管理します。
+ 現在、Hiberenate3はJACCで許可しかつ、JAASで認証したアクションを許しています。
+ これはイベントアーキテクチャの最上位に組み込まれているオプションの機能です。
</para>
<para>
- �܂��ŏ��ɁA�K�ȃC�x���g���X�i��ݒ肵��JAAS�F��g����悤�ɂ��Ȃ���Ȃ�܂���B
+ まず最初に、適切なイベントリスナを設定してJAAS認証を使えるようにしなければなりません。
</para>
<programlisting><![CDATA[<listener type="pre-delete" class="org.hibernate.secure.JACCPreDeleteEventListener"/>
@@ -251,21 +253,21 @@
<listener type="pre-load" class="org.hibernate.secure.JACCPreLoadEventListener"/>]]></programlisting>
<para>
- ����̃C�x���g�^�ɑ��Ă��傤�Lj�̃��X�i������Ƃ��A
+ 特定のイベント型に対してちょうど一つのリスナがあるとき、
<literal><listener type="..." class="..."/></literal>
- �� <literal><event type="..."><listener class="..."/></event></literal>
- �̊ȗ��`�ɉ߂��Ȃ����Ƃɒ��ӂ��Ă��������B
+ は <literal><event type="..."><listener class="..."/></event></literal>
+ の簡略形に過ぎないことに注意してください。
</para>
<para>
- ���ɁA������ <literal>hibernate.cfg.xml</literal> �Ń��[���Ƀp�[�~�b�V������^���Ă��������F
+ 次に、同じく <literal>hibernate.cfg.xml</literal> でロールにパーミッションを与えてください:
</para>
<programlisting><![CDATA[<grant role="admin" entity-name="User" actions="insert,update,read"/>
<grant role="su" entity-name="User" actions="*"/>]]></programlisting>
<para>
- ���̃��[�����͎g�p����JACC�v���o�C�_�ɗ�����郍�[���ł��B
+ このロール名は使用するJACCプロバイダに理解されるロールです。
</para>
</sect1>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/example_mappings.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/example_mappings.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/example_mappings.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,22 +1,22 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="example-mappings">
- <title>��F���낢��ȃ}�b�s���O</title>
+ <title>例:いろいろなマッピング</title>
<para>
- ���̏͂ł́A��蕡�G�Ȋ֘A�̃}�b�s���O�������Љ�܂��B
+ この章では、より複雑な関連のマッピングをいくつか紹介します。
</para>
<sect1 id="example-mappings-emp">
- <title>�ٗp��/�]�ƈ�</title>
+ <title>雇用者/従業員</title>
<para>
- <literal>Employer</literal> �� <literal>Employee</literal> �̊W��\���ȉ��̃��f���́A
- �֘A�̕\���Ɏ��ۂ̃G���e�B�e�B�N���X�i <literal>Employment</literal> �j
- ��g���܂��B
- �Ȃ��Ȃ�A����2�̃p�[�e�B�ɕ����̊��Ԍٗp�����Ƃ������Ƃ����肦�邩��ł��B
- ����̒l�Ə]�ƈ��̖��O���f�������邽�߂ɃR���|�[�l���g��g���Ă��܂��B
+ <literal>Employer</literal> と <literal>Employee</literal> の関係を表す以下のモデルは、
+ 関連の表現に実際のエンティティクラス( <literal>Employment</literal> )
+ を使います。
+ なぜなら、同じ2つのパーティに複数の期間雇用されるということがありえるからです。
+ お金の値と従業員の名前をモデル化するためにコンポーネントを使っています。
</para>
<mediaobject>
@@ -29,7 +29,7 @@
</mediaobject>
<para>
- �}�b�s���O�h�L�������g�̈��ł��F
+ マッピングドキュメントの一例です:
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -82,7 +82,7 @@
</hibernate-mapping>]]></programlisting>
<para>
- <literal>SchemaExport</literal> �Ő��������e�[�u���X�L�[�}�ł��B
+ <literal>SchemaExport</literal> で生成したテーブルスキーマです。
</para>
<programlisting><![CDATA[create table employers (
@@ -122,14 +122,14 @@
</sect1>
<sect1 id="example-mappings-authorwork">
- <title>���/��i</title>
+ <title>作者/作品</title>
<para>
- <literal>Work</literal> , <literal>Author</literal> ������ <literal>Person</literal>
- �̊W��\���ȉ��̃��f����l���Ă݂Ă��������B
- <literal>Work</literal> �� <literal>Author</literal> �̊W�𑽑Α��֘A�ŕ\���Ă��܂��B
- <literal>Author</literal> �� <literal>Person</literal> �̊W�͈�Έ�֘A�Ƃ��ĕ\���Ă��܂��B
- ���ɂ� <literal>Author</literal> �� <literal>Person</literal> ��g������Ƃ������@�����܂��B
+ <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> を拡張するという方法もあります。
</para>
<mediaobject>
@@ -142,7 +142,7 @@
</mediaobject>
<para>
- �ȉ��̃}�b�s���O�h�L�������g�͂��̂悤�ȊW�𐳊m�ɕ\�����Ă��܂��B
+ 以下のマッピングドキュメントはこのような関係を正確に表現しています。
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -198,11 +198,11 @@
</hibernate-mapping>]]></programlisting>
<para>
- ���̃}�b�s���O�ɂ�4�̃e�[�u��������܂��B
+ このマッピングには4つのテーブルがあります。
<literal>works</literal> , <literal>authors</literal> , <literal>persons</literal>
- �͂��ꂼ��A�d���A��ҁA�l�̃f�[�^��ێ����܂��B
- <literal>author_work</literal> �͍�҂ƍ�i�����N����֘A�e�[�u���ł��B
- �ȉ��� <literal>SchemaExport</literal> �Ő��������e�[�u���X�L�[�}�ł��B
+ はそれぞれ、仕事、作者、人のデータを保持します。
+ <literal>author_work</literal> は作者と作品をリンクする関連テーブルです。
+ 以下は <literal>SchemaExport</literal> で生成したテーブルスキーマです。
</para>
<programlisting><![CDATA[create table works (
@@ -243,17 +243,17 @@
</sect1>
<sect1 id="example-mappings-customerorderproduct">
- <title>�ڋq/����/���i</title>
+ <title>顧客/注文/製品</title>
<para>
- ���āA <literal>Customer</literal> , <literal>Order</literal> , <literal>LineItem</literal>
- <literal>Product</literal> �̊W��\�����f����l���Ă݂܂��傤�B
- <literal>Customer</literal> �� <literal>Order</literal> �͈�Α��̊֘A�ł����A
+ さて、 <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>
- �͂ǂ̂悤�ɕ\������ׂ��ł��傤���H
- <literal>LineItem</literal> ��A<literal>Order</literal> �� <literal>Product</literal>
- �̑��Α��֘A��\������֘A�N���X�Ƃ��ă}�b�s���O���܂����B
- Hibernate�ł͂����R���|�W�b�g�v�f�ƌĂт܂��B
+ はどのように表現するべきでしょうか?
+ <literal>LineItem</literal> を、<literal>Order</literal> と <literal>Product</literal>
+ の多対多関連を表現する関連クラスとしてマッピングしました。
+ Hibernateではこれをコンポジット要素と呼びます。
</para>
<mediaobject>
@@ -266,7 +266,7 @@
</mediaobject>
<para>
- �}�b�s���O�h�L�������g�F
+ マッピングドキュメント:
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -309,8 +309,8 @@
<para>
<literal>customers</literal> , <literal>orders</literal> , <literal>line_items</literal> ,
- <literal>products</literal> �͂��ꂼ��A�ڋq�A�����A�������ׁA���i�̃f�[�^��ێ����܂��B
- <literal>line_items</literal> �͒����Ɛ��i�����N����֘A�e�[�u���Ƃ��Ă�����܂��B
+ <literal>products</literal> はそれぞれ、顧客、注文、注文明細、製品のデータを保持します。
+ <literal>line_items</literal> は注文と製品をリンクする関連テーブルとしても働きます。
</para>
<programlisting><![CDATA[create table customers (
@@ -350,18 +350,18 @@
</sect1>
<sect1 id="misc">
- <title>��X�G���ȃ}�b�s���O��</title>
+ <title>種々雑多なマッピング例</title>
<para>
- �����ɂ����͂��ׂ�Hibernate�̃e�X�g�X�C�[�g������܂����B
- �����ɂ́A���ɂ��������̃}�b�s���O�̗Ⴊ����܂��B
- Hibernate�f�B�X�g���r���[�V������ <literal>test</literal> �t�H���_�����������B
+ ここにある例はすべてHibernateのテストスイートから取りました。
+ そこには、他にもたくさんのマッピングの例があります。
+ Hibernateディストリビューションの <literal>test</literal> フォルダを見てください。
</para>
- <para>TODO: �����ɕ��͂߂�</para>
+ <para>TODO: ここに文章を埋める</para>
<sect2 id="example-mappings-typed-onetone">
- <title>�u�^�t�����ꂽ�v��Έ�֘A</title>
+ <title>「型付けされた」一対一関連</title>
<programlisting><![CDATA[<class name="Person">
<id name="name"/>
<one-to-one name="address"
@@ -391,7 +391,7 @@
</sect2>
<sect2 id="example-mappings-composite-key">
- <title>�����L�[�̗�</title>
+ <title>複合キーの例</title>
<programlisting><![CDATA[<class name="Customer">
<id name="customerId"
@@ -508,7 +508,7 @@
</sect2>
<sect2 id="example-mappings-composite-key-manytomany">
- <title>�����L�[�������L���鑽�Α�</title>
+ <title>複合キー属性を共有する多対多</title>
<programlisting><![CDATA[<class name="User" table="`User`">
<composite-id>
<key-property name="name"/>
@@ -547,7 +547,7 @@
</sect2>
<sect2 id="example-mappings-content-discrimination">
- <title>discrimination�Ɋ�Â���e</title>
+ <title>discriminationに基づく内容</title>
<programlisting><![CDATA[<class name="Person"
discriminator-value="P">
@@ -601,7 +601,7 @@
</sect2>
<sect2 id="example-mappings-association-alternatekeys" revision="2">
- <title>��փL�[�̊֘A</title>
+ <title>代替キーの関連</title>
<programlisting><![CDATA[<class name="Person">
<id name="id">
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/example_parentchild.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/example_parentchild.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/example_parentchild.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,70 +1,72 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="example-parentchild">
- <title>��F�e/�q��
+ <title>例:親/子供
</title>
<para>
- �V�K���[�U��Hibernate��g���Ă܂��ŏ��Ɉ������f���̈�ɁA�e�q�^�̃��f����������܂��B
- ���̃��f�����ɂ͓�̃A�v���[�`�����݂��܂��B�Ƃ�킯�V�K���[�U�ɂƂ��āA
- ���܂��܂ȗ��R����ł�֗����Ǝv����A�v���[�`�́A<literal>�e</literal> ���� <literal>�q��</literal>
- �ւ� <literal><one-to-many></literal> �֘A�ɂ�� <literal>�e</literal> �� <literal>�q��</literal>
- �̗�����G���e�B�e�B�N���X�Ƃ��ă��f�����O������@�ł�
- �i�����̕��@�́A<literal>�q��</literal> �� <literal><composite-element></literal> �Ƃ��Ē�`�����̂ł��j�B
- ����ŁiHibernate�ɂ�����j��Α��֘A�̃f�t�H���g�̃Z�}���e�B�N�X���A�ʏ�̕����v�f�̃}�b�s���O����A
- �e�q�W�̃Z�}���e�B�N�X���牓�����Ƃ��킩��܂��B
- ����ł͐e�q�W������I���G���K���g�Ƀ��f�����O���邽�߂ɁA
- <emphasis>�J�X�P�[�h�����g�����o������Α��֘A</emphasis> �̈������������܂��B����͂܂����������̂ł͂���܂���B
+ 新規ユーザがHibernateを使ってまず最初に扱うモデルの一つに、親子型のモデル化があります。
+ このモデル化には二つのアプローチが存在します。とりわけ新規ユーザにとって、
+ さまざまな理由から最も便利だと思われるアプローチは、<literal>親</literal> から <literal>子供</literal>
+ への <literal><one-to-many></literal> 関連により <literal>親</literal> と <literal>子供</literal>
+ の両方をエンティティクラスとしてモデリングする方法です
+ (もう一つの方法は、<literal>子供</literal> を <literal><composite-element></literal> として定義するものです)。
+ これで(Hibernateにおける)一対多関連のデフォルトのセマンティクスが、通常の複合要素のマッピングよりも、
+ 親子関係のセマンティクスから遠いことがわかります。
+ それでは親子関係を効率的かつエレガントにモデリングするために、
+ <emphasis>カスケード操作を使った双方向一対多関連</emphasis> の扱い方を説明します。これはまったく難しいものではありません。
</para>
<sect1 id="example-parentchild-collections">
- <title>�R���N�V�����Ɋւ��钍��</title>
+ <title>コレクションに関する注意</title>
<para>
- Hibernate�̃R���N�V�����͎��g�̃G���e�B�e�B�̘_���I�ȕ����ƍl�����A
- �����ĕ�܂���G���e�B�e�B�̂�̂ł͂���܂���B����͒v���I�ȈႢ�ł��I
- ����͈ȉ��̂悤�Ȍ��ʂɂȂ�܂��F
+ Hibernateのコレクションは自身のエンティティの論理的な部分と考えられ、
+ 決して包含するエンティティのものではありません。これは致命的な違いです!
+ これは以下のような結果になります:
</para>
<itemizedlist>
<listitem>
<para>
- �I�u�W�F�N�g��R���N�V��������폜�A�܂��̓R���N�V�����ɒlj�����Ƃ��A
- �R���N�V�����̃I�[�i�[�̃o�[�W�����ԍ��̓C���N�������g����܂��B
+ オブジェクトをコレクションから削除、またはコレクションに追加するとき、
+ コレクションのオーナーのバージョン番号はインクリメントされます。
</para>
</listitem>
<listitem>
<para>
- ����R���N�V��������폜���ꂽ�I�u�W�F�N�g���l�^�̃C���X�^���X
- �i�Ⴆ�R���|�W�b�g�G�������g)�������Ȃ�A���̃I�u�W�F�N�g�͉i���I�ł͂Ȃ��Ȃ�A
- ���̏�Ԃ̓f�[�^�x�[�X���犮�S�ɍ폜����܂��B
- �����悤�ɁA�l�^�̃C���X�^���X��R���N�V�����ɒlj�����ƁA���̏�Ԃ͂����ɉi���I�ɂȂ�܂��B
+ もしコレクションから削除されたオブジェクトが値型のインスタンス
+ (例えばコンポジットエレメント)だったならば、そのオブジェクトは永続的ではなくなり、
+ その状態はデータベースから完全に削除されます。
+ 同じように、値型のインスタンスをコレクションに追加すると、その状態はすぐに永続的になります。
</para>
</listitem>
<listitem>
<para>
- ����A����G���e�B�e�B���R���N�V�����i��Α��܂��͑��Α��֘A)����폜����Ă�A
- �f�t�H���g�ł͂���͍폜����܂���B���̓���͊��S�Ɉ�т��Ă��܂��B
- ���Ȃ킿�A���̃G���e�B�e�B�̓����Ԃ�ύX���Ă�A�֘A����G���e�B�e�B�����ł��ׂ��ł͂Ȃ��Ƃ������Ƃł��B
- ���l�ɁA�G���e�B�e�B���R���N�V�����ɒlj�����Ă�A�f�t�H���g�ł͂��̃G���e�B�e�B�͉i���I�ɂ͂Ȃ�܂���B
+ 一方、もしエンティティがコレクション(一対多または多対多関連)から削除されても、
+ デフォルトではそれは削除されません。この動作は完全に一貫しています。
+ すなわち、他のエンティティの内部状態を変更しても、関連するエンティティが消滅すべきではないということです。
+ 同様に、エンティティがコレクションに追加されても、デフォルトではそのエンティティは永続的にはなりません。
</para>
</listitem>
</itemizedlist>
<para>
- ���̑���ɁA�f�t�H���g�̓���ł́A�G���e�B�e�B��R���N�V�����ɒlj�����ƒP�ɓ�̃G���e�B�e�B�Ԃ̃����N��쐬���A
- ����G���e�B�e�B��폜����ƃ����N��폜���܂��B����͂��ׂẴP�[�X�ɂ����Ĕ��ɓK�ł��B
- ���ꂪ�K�łȂ��̂͐e/�q�W�̏ꍇ�ł��B���̏ꍇ�q���̐����͐e�̃��C�t�T�C�N���ɐ�������邩��ł��B
+ その代わりに、デフォルトの動作では、エンティティをコレクションに追加すると単に二つのエンティティ間のリンクを作成し、
+ 一方エンティティを削除するとリンクも削除します。これはすべてのケースにおいて非常に適切です。
+ これが適切でないのは親/子関係の場合です。この場合子供の生存は親のライフサイクルに制限されるからです。
</para>
</sect1>
<sect1 id="example-parentchild-bidir">
- <title>�o������Α�
+ <title>双方向一対多
</title>
<para>
- <literal>Parent</literal> ���� <literal>Child</literal> �ւ̒P���� <literal><one-to-many></literal> �֘A����n�߂�Ƃ��܂��B
+ <literal>Parent</literal> から <literal>Child</literal> への単純な <literal><one-to-many></literal> 関連から始めるとします。
</para>
<programlisting><![CDATA[<set name="children">
@@ -73,7 +75,7 @@
</set>]]></programlisting>
<para>
- �ȉ��̃R�[�h����s����ƁA
+ 以下のコードを実行すると、
</para>
<programlisting><![CDATA[Parent p = .....;
@@ -83,25 +85,25 @@
session.flush();]]></programlisting>
<para>
- Hibernate�͓��SQL���s���܂�:
+ Hibernateは二つのSQL文を発行します:
</para>
<itemizedlist>
<listitem>
<para>
- <literal>c</literal>�ɑ��郌�R�[�h������<literal>INSERT</literal>
+ <literal>c</literal>に対するレコードを生成する<literal>INSERT</literal>
</para>
</listitem>
<listitem>
<para>
- <literal>p</literal>����<literal>c</literal>�ւ̃����N��쐬����<literal>UPDATE</literal>
+ <literal>p</literal>から<literal>c</literal>へのリンクを作成する<literal>UPDATE</literal>
</para>
</listitem>
</itemizedlist>
<para>
- ����͔�����I�Ȃ����ł͂Ȃ��A<literal>parent_id</literal> �J�����ɂ����� <literal>NOT NULL</literal> ����Ɉᔽ���܂��B
- �R���N�V�����̃}�b�s���O�� <literal>not-null="true"</literal> �Ǝw�肷�邱�ƂŁAnull����ᔽ������邱�Ƃ��ł��܂�:
+ これは非効率的なだけではなく、<literal>parent_id</literal> カラムにおいて <literal>NOT NULL</literal> 制約に違反します。
+ コレクションのマッピングで <literal>not-null="true"</literal> と指定することで、null制約違反を解決することができます:
</para>
<programlisting><![CDATA[<set name="children">
@@ -110,24 +112,24 @@
</set>]]></programlisting>
<para>
- ���������̉���͐����ł��܂���B
+ しかしこの解決策は推奨できません。
</para>
<para>
- ���̓���̍��{�I�Ȍ����́A<literal>p</literal> ���� <literal>c</literal> �ւ̃����N
- �i�O���L�[ <literal>parent_id</literal>)�� <literal>Child</literal> �I�u�W�F�N�g�̏�Ԃ̈ꕔ�Ƃ͍l����ꂸ�A
- ���̂��� <literal>INSERT</literal> �ɂ���ă����N����������Ȃ����Ƃł��B
- �ł�����A����̓����N��Child�}�b�s���O�̈ꕔ�ɂ��邱�Ƃł��B
+ この動作の根本的な原因は、<literal>p</literal> から <literal>c</literal> へのリンク
+ (外部キー <literal>parent_id</literal>)は <literal>Child</literal> オブジェクトの状態の一部とは考えられず、
+ そのため <literal>INSERT</literal> によってリンクが生成されないことです。
+ ですから、解決策はリンクをChildマッピングの一部にすることです。
</para>
<programlisting><![CDATA[<many-to-one name="parent" column="parent_id" not-null="true"/>]]></programlisting>
<para>
- (�܂� <literal>Child</literal> �N���X�� <literal>parent</literal> �v���p�e�B��lj�����K�v������܂��B)
+ (また <literal>Child</literal> クラスに <literal>parent</literal> プロパティを追加する必要があります。)
</para>
<para>
- ����ł� <literal>Child</literal> �G���e�B�e�B�������N�̏�Ԃ𐧌䂷��悤�ɂȂ����̂ŁA
- �R���N�V�����������N��X�V���Ȃ��悤�ɂ��܂��傤�B����ɂ� <literal>inverse</literal> ������g���܂��B
+ それでは <literal>Child</literal> エンティティがリンクの状態を制御するようになったので、
+ コレクションがリンクを更新しないようにしましょう。それには <literal>inverse</literal> 属性を使います。
</para>
<programlisting><![CDATA[<set name="children" inverse="true">
@@ -136,7 +138,7 @@
</set>]]></programlisting>
<para>
- �ȉ��̃R�[�h��g���A�V���� <literal>Child</literal> ��lj����邱�Ƃ��ł��܂��B
+ 以下のコードを使えば、新しい <literal>Child</literal> を追加することができます。
</para>
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
@@ -147,11 +149,11 @@
session.flush();]]></programlisting>
<para>
- ����ɂ��ASQL�� <literal>INSERT</literal> ��������������s�����悤�ɂȂ�܂����I
+ これにより、SQLの <literal>INSERT</literal> 文が一つだけが発行されるようになりました!
</para>
<para>
- ���������������ɂ́A<literal>Parent</literal> �� <literal>addChild()</literal> ���\�b�h��쐬���܂��B
+ もう少し強化するには、<literal>Parent</literal> の <literal>addChild()</literal> メソッドを作成します。
</para>
<programlisting><![CDATA[public void addChild(Child c) {
@@ -160,7 +162,7 @@
}]]></programlisting>
<para>
- <literal>Child</literal> ��lj�����R�[�h�͂��̂悤�ɂȂ�܂��B
+ <literal>Child</literal> を追加するコードはこのようになります。
</para>
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
@@ -172,10 +174,10 @@
</sect1>
<sect1 id="example-parentchild-cascades">
- <title>���C�t�T�C�N���̃J�X�P�[�h</title>
+ <title>ライフサイクルのカスケード</title>
<para>
- �����I�� <literal>save()</literal> ��R�[������̂͂܂��ς킵����̂ł��B�����J�X�P�[�h��g���đΏ����܂��B
+ 明示的に <literal>save()</literal> をコールするのはまだ煩わしいものです。これをカスケードを使って対処します。
</para>
<programlisting><![CDATA[<set name="children" inverse="true" cascade="all">
@@ -184,7 +186,7 @@
</set>]]></programlisting>
<para>
- ����ɂ���قǂ̃R�[�h���̂悤�ɒP�������܂�
+ これにより先ほどのコードをこのように単純化します
</para>
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
@@ -193,8 +195,8 @@
session.flush();]]></programlisting>
<para>
- ���l�� <literal>Parent</literal> ��ۑ��܂��͍폜����Ƃ��ɁA�q��������o���Ĉ����K�v�͂���܂���B
- �ȉ��̃R�[�h�� <literal>p</literal> ��폜���A�����ăf�[�^�x�[�X���炻�̎q�����ׂč폜���܂��B
+ 同様に <literal>Parent</literal> を保存または削除するときに、子供を一つ一つ取り出して扱う必要はありません。
+ 以下のコードは <literal>p</literal> を削除し、そしてデータベースからその子供をすべて削除します。
</para>
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
@@ -202,7 +204,7 @@
session.flush();]]></programlisting>
<para>
- ���������̃R�[�h��
+ しかしこのコードは
</para>
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
@@ -212,9 +214,9 @@
session.flush();]]></programlisting>
<para>
- �f�[�^�x�[�X���� <literal>c</literal> ��폜���܂���B<literal>p</literal> �ւ̃����N��폜����
- �i�����Ă��̃P�[�X�ł� <literal>NOT NULL</literal> ����ᔽ������N�����j�����ł��B
- <literal>Child</literal> �� <literal>delete()</literal> ������K�v������܂��B
+ データベースから <literal>c</literal> を削除しません。<literal>p</literal> へのリンクを削除する
+ (そしてこのケースでは <literal>NOT NULL</literal> 制約違反を引き起こす)だけです。
+ <literal>Child</literal> の <literal>delete()</literal> を明示する必要があります。
</para>
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
@@ -224,9 +226,9 @@
session.flush();]]></programlisting>
<para>
- �����̃P�[�X�ł͎��ۂ� <literal>Child</literal> ���e�Ȃ��ł͑��݂ł��Ȃ��悤�ɂȂ�܂����B
- ���̂��߁A����R���N�V�������� <literal>Child</literal> ���菜���ꍇ�A�����폜�������ł��B
- ���̂��߂ɂ� <literal>cascade="all-delete-orphan"</literal> ��g��Ȃ���Ȃ�܂���B
+ 今このケースでは実際に <literal>Child</literal> が親なしでは存在できないようになりました。
+ そのため、もしコレクションから <literal>Child</literal> を取り除く場合、これも削除したいです。
+ そのためには <literal>cascade="all-delete-orphan"</literal> を使わなければなりません。
</para>
<programlisting><![CDATA[<set name="children" inverse="true" cascade="all-delete-orphan">
@@ -235,35 +237,35 @@
</set>]]></programlisting>
<para>
- ���ӁF�R���N�V�����̃}�b�s���O�� <literal>inverse="true"</literal> �Ǝw�肵�Ă�A
- �R���N�V�����̗v�f�̃C�e���[�V�����ɂ���āA�ˑR�J�X�P�[�h�����s����܂��B
- ���̂��߂���J�X�P�[�h�ŃI�u�W�F�N�g��Z�[�u�A�폜�A�X�V����K�v������Ȃ�A
- �����R���N�V�����ɒlj����Ȃ���Ȃ�܂���B�P�� <literal>setParent()</literal> ��ĂԂ����ł͕s�\���ł��B
+ 注意:コレクションのマッピングで <literal>inverse="true"</literal> と指定しても、
+ コレクションの要素のイテレーションによって、依然カスケードが実行されます。
+ そのためもしカスケードでオブジェクトをセーブ、削除、更新する必要があるなら、
+ それをコレクションに追加しなければなりません。単に <literal>setParent()</literal> を呼ぶだけでは不十分です。
</para>
</sect1>
<sect1 id="example-parentchild-update">
- <title>�J�X�P�[�h�� <literal>unsaved-value</literal></title>
+ <title>カスケードと <literal>unsaved-value</literal></title>
<para>
- <literal>Parent</literal> ���A���� <literal>Session</literal> �Ń��[�h����AUI�̃A�N�V�����ŕύX���������A
- <literal>update()</literal> ��Ă�ł��̕ύX��V�����Z�b�V�����ʼni�����������Ƃ��܂��B
- <literal>Parent</literal> ���q���̃R���N�V���������A�J�X�P�[�h�X�V���L���ɂȂ��Ă��邽�߁A
- Hibernate�͂ǂ̎q�����V�����C���X�^���X�����ꂽ���A�ǂꂪ�f�[�^�x�[�X�̊����̍s�ɑ�������̂���m��K�v������܂��B
- <literal>Parent</literal> �� <literal>Child</literal> �̗����� <literal>java.lang.Long</literal>
- �^�̎��ʃv���p�e�B�������Ƃ��܂��傤�B
- Hibernate�͂ǂ̎q�����V������̂����肷�邽�߂Ɏ��ʃv���p�e�B�̒l��g���܂�(version��timestamp�v���p�e�B��g���܂��B
- <xref linkend="manipulatingdata-updating-detached"/> �Q��)�BHibernate3�ɂȂ��āA
- �����I�� <literal>unsaved-value</literal> ��w�肷��K�v�͂Ȃ��Ȃ�܂����B
+ <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> を指定する必要はなくなりました。
</para>
<para>
- �ȉ��̃R�[�h�� <literal>parent</literal> �� <literal>child</literal> ��X�V���A<literal>newChild</literal> ��}�����܂��B
+ 以下のコードは <literal>parent</literal> と <literal>child</literal> を更新し、<literal>newChild</literal> を挿入します。
</para>
<programlisting><![CDATA[//parent and child were both loaded in a previous session
-//parent��child�͗����Ƃ�A�ȑO��Session�Ń��[�h����Ă��܂�
+//parentとchildは両方とも、以前のSessionでロードされています
parent.addChild(child);
Child newChild = new Child();
parent.addChild(newChild);
@@ -271,11 +273,11 @@
session.flush();]]></programlisting>
<para>
- �����͐������ꂽ���ʎq�̏ꍇ�ɂ͔��ɗǂ��̂ł����A���蓖�Ă�ꂽ���ʎq�ƕ������ʎq�̏ꍇ�͂ǂ��ł��傤���H
- �����Hibernate���A�i���[�U�ɂ�芄�蓖�Ă�ꂽ���ʎq���j�V�����C���X�^���X�����ꂽ�I�u�W�F�N�g�ƁA
- �ȑO��Session�Ń��[�h���ꂽ�I�u�W�F�N�g���ʂł��Ȃ����߁A������ł��B
- ���̏ꍇ�AHibernate�̓^�C���X�^���v���o�[�W�����̃v���p�e�B�̂ǂ��炩��g�����A�L���b�V���ɖ₢���킹�܂��B
- �ň��̏ꍇ�A�s�����݂��邩�ǂ����f�[�^�x�[�X���܂��B
+ これらは生成された識別子の場合には非常に良いのですが、割り当てられた識別子と複合識別子の場合はどうでしょうか?
+ これはHibernateが、(ユーザにより割り当てられた識別子を持つ)新しくインスタンス化されたオブジェクトと、
+ 以前のSessionでロードされたオブジェクトを区別できないため、より難しいです。
+ この場合、Hibernateはタイムスタンプかバージョンのプロパティのどちらかを使うか、二次キャッシュに問い合わせます。
+ 最悪の場合、行が存在するかどうかデータベースを見ます。
</para>
<!-- undocumenting
@@ -341,22 +343,22 @@
</sect1>
<sect1 id="example-parentchild-conclusion">
- <title>���_
+ <title>結論
</title>
<para>
- �����ł͂��Ȃ�̗ʂ�v���̂ŁA�ŏ��̍��͍������Ă���悤�Ɏv���邩�����܂���B
- ���������ۂ́A���ׂĔ��ɗǂ����삵�܂��B�قƂ�ǂ�Hibernate�A�v���P�[�V�����ł́A�����̏�ʂŐe�q�p�^�[����g�p���܂��B
+ ここではかなりの量を要約したので、最初の頃は混乱しているように思われるかもしれません。
+ しかし実際は、すべて非常に良く動作します。ほとんどのHibernateアプリケーションでは、多くの場面で親子パターンを使用します。
</para>
<para>
- �ŏ��̒i���ő�֕��@�ɂ��ĐG��܂����B��L�̂悤�Ȗ��� <literal><composite-element></literal> �}�b�s���O�̏ꍇ�͑��݂����A
- �ɂ������炸����͊m���ɐe�q�W�̃Z�}���e�B�N�X�����܂��B
- �������c�O�Ȃ���A�����v�f�N���X�ɂ͓�̑傫�Ȑ���������܂��F
- 1�͕����v�f�̓R���N�V���������Ƃ��ł��Ȃ����Ƃł��B����ЂƂ́A
- ���j�[�N�Ȑe�ł͂Ȃ��G���e�B�e�B�̎q���ƂȂ�ׂ��ł͂Ȃ��Ƃ������Ƃł�
+ 最初の段落で代替方法について触れました。上記のような問題は <literal><composite-element></literal> マッピングの場合は存在せず、
+ にもかかわらずそれは確かに親子関係のセマンティクスを持ちます。
+ しかし残念ながら、複合要素クラスには二つの大きな制限があります:
+ 1つは複合要素はコレクションを持つことができないことです。もうひとつは、
+ ユニークな親ではないエンティティの子供となるべきではないということです
</para>
</sect1>
-</chapter>
\ No newline at end of file
+</chapter>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/example_weblog.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/example_weblog.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/example_weblog.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,15 +1,17 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="example-weblog">
- <title>��: Weblog�A�v���P�[�V����</title>
+ <title>例: Weblogアプリケーション</title>
<sect1 id="example-weblog-classes">
- <title>�i���N���X
+ <title>永続クラス
</title>
<para>
- �i���N���X���E�F�u���O�ƁA�E�F�u���O�Ɍf�����ꂽ���ڂ�\���Ă��܂��B
- �����͒ʏ�̐e�q�W�Ƃ��ă��f�����O����܂����A
- set�ł͂Ȃ�����������bag��g�p���邱�Ƃɂ��܂��B
+ 永続クラスがウェブログと、ウェブログに掲示された項目を表しています。
+ それらは通常の親子関係としてモデリングされますが、
+ setではなく順序を持ったbagを使用することにします。
</para>
<programlisting><![CDATA[package eg;
@@ -88,11 +90,11 @@
</sect1>
<sect1 id="example-weblog-mappings">
- <title>Hibernate�̃}�b�s���O
+ <title>Hibernateのマッピング
</title>
<para>
- XML�}�b�s���O�́A���ł͂ƂĂ�ȒP�Ȃ͂��ł��B
+ XMLマッピングは、今ではとても簡単なはずです。
</para>
<programlisting><![CDATA[<?xml version="1.0"?>
@@ -182,11 +184,11 @@
</sect1>
<sect1 id="example-weblog-code">
- <title>Hibernate�̃R�[�h</title>
+ <title>Hibernateのコード</title>
<para>
- �ȉ��̃N���X�́A
- Hibernate�ł����̃N���X��g���Ăł��邱�Ƃ����������Ă��܂��B
+ 以下のクラスは、
+ Hibernateでこれらのクラスを使ってできることをいくつか示しています。
</para>
<programlisting><![CDATA[package eg;
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/filters.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/filters.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/filters.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,32 +1,34 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="filters">
- <title>�f�[�^�̃t�B���^�����O</title>
+ <title>データのフィルタリング</title>
<para>
- Hibernate3�ł́u�����v���[���Ɋ�Â��ăf�[�^�������߂̉���I�ȕ��@��p�ӂ��Ă��܂��B
- <emphasis>Hibernate filter</emphasis> �̓O���[�o���ŁA���O�t���ŁA�p�����[�^�����ꂽ�t�B���^�ł��B
- �����Hibernate�Z�b�V�������ƂɗL���������ւ����܂��B
+ Hibernate3では「可視性」ルールに基づいてデータを扱うための画期的な方法を用意しています。
+ <emphasis>Hibernate filter</emphasis> はグローバルで、名前付きで、パラメータ化されたフィルタです。
+ これはHibernateセッションごとに有効無効を切り替えられます。
</para>
<sect1 id="objectstate-filters">
- <title>Hibernate�̃t�B���^</title>
+ <title>Hibernateのフィルタ</title>
<para>
- Hibernate3�̓t�B���^�N���C�e���A���炩���ߒ�`���A
- �����̃t�B���^��N���X��R���N�V�������x���ɉ�����@�\������܂����B
- �t�B���^�N���C�e���A�͐���߂��`����@�\�ł��B
- �����̃t�B���^���̓p�����[�^���ł���Ƃ������Ƃ����A
- �N���X�₳�܂��܂ȃR���N�V�����v�f�ŗ��p�\�Ȣwhere���ɔ��ɂ悭���Ă��܂��B
- �A�v���P�[�V�����́A�^����ꂽ�t�B���^��\�ɂ��ׂ����A
- �����Ă��̃p�����[�^�l���ɂ��ׂ�������s���Ɍ��肷�邱�Ƃ��ł��܂��B
- �t�B���^�̓f�[�^�x�[�X�r���[�̂悤�Ɏg�p����܂����A�A�v���P�[�V������ł̓p�����[�^������܂��B
+ Hibernate3はフィルタクライテリアをあらかじめ定義し、
+ これらのフィルタをクラスやコレクションレベルに加える機能を加えました。
+ フィルタクライテリアは制約節を定義する機能です。
+ これらのフィルタ条件はパラメータ化できるということを除き、
+ クラスやさまざまなコレクション要素で利用可能な「where」句に非常によく似ています。
+ アプリケーションは、与えられたフィルタを可能にすべきか、
+ そしてそのパラメータ値を何にすべきかを実行時に決定することができます。
+ フィルタはデータベースビューのように使用されますが、アプリケーション内ではパラメータ化されます。
</para>
<para>
- �t�B���^��g�����߂ɂ͂܂��A�K�ȃ}�b�s���O�v�f�ɒ�`�A�lj����Ȃ��Ă͂Ȃ�܂���B
- �t�B���^���`���邽�߂ɂ́A
- <literal><hibernate-mapping/></literal> �v�f��� <literal><filter-def/></literal> �v�f��g�p���܂��B�F
+ フィルタを使うためにはまず、適切なマッピング要素に定義、追加しなくてはなりません。
+ フィルタを定義するためには、
+ <literal><hibernate-mapping/></literal> 要素内で <literal><filter-def/></literal> 要素を使用します。:
</para>
<programlisting><![CDATA[<filter-def name="myFilter">
@@ -34,7 +36,7 @@
</filter-def>]]></programlisting>
<para>
- �������ăt�B���^�̓N���X�ւƌ��ѕt�����܂��B�F
+ そうしてフィルタはクラスへと結び付けられます。:
</para>
<programlisting><![CDATA[<class name="myClass" ...>
@@ -43,7 +45,7 @@
</class>]]></programlisting>
<para>
- �܂��A�R���N�V�����ɑ��Ă͎��̂悤�ɂȂ�܂��B�F
+ また、コレクションに対しては次のようになります。:
</para>
<programlisting><![CDATA[<set ...>
@@ -51,27 +53,27 @@
</set>]]></programlisting>
<para>
- �ǂ���ɑ��Ă�(�܂��A���ꂼ���)�����ɐݒ肷�邱�Ƃ�ł��܂��B
+ どちらに対しても(また、それぞれを複数)同時に設定することもできます。
</para>
<para>
- <literal>Session</literal> ��̃��\�b�h�� <literal>enableFilter(String filterName)</literal>,
- <literal>getEnabledFilter(String filterName)</literal>, <literal>disableFilter(String filterName)</literal> �ł��B
- �f�t�H���g�ł́A�t�B���^�͗^����ꂽ�Z�b�V�����ɑ��Ďg�p <emphasis>�ł��܂���</emphasis> �B
- <literal>Filter</literal> �C���X�^���X��Ԃ�l�Ƃ��� <literal>Session.enabledFilter()</literal> ���\�b�h��g�����ƂŁA
- �t�B���^�͖����I�Ɏg�p�\�ƂȂ�܂��B
- ��Œ�`�����P���ȃt�B���^�̎g�p�́A���̂悤�ɂȂ�܂��B�F
+ <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> メソッドを使うことで、
+ フィルタは明示的に使用可能となります。
+ 上で定義した単純なフィルタの使用は、このようになります。:
</para>
<programlisting><![CDATA[session.enableFilter("myFilter").setParameter("myFilterParam", "some-value");]]></programlisting>
<para>
- org.hibernate.Filter�C���^�[�t�F�C�X�̃��\�b�h�́A
- Hibernate�̑����ɋ��ʂ��Ă��郁�\�b�h�A�������Ă��邱�Ƃɒ��ӂ��Ă��������B
+ org.hibernate.Filterインターフェイスのメソッドは、
+ Hibernateの多くに共通しているメソッド連鎖を許していることに注意してください。
</para>
<para>
- �L���ȃ��R�[�h�f�[�^�p�^�[�����ꎞ�f�[�^��g�������S�ȗ�ł��F
+ 有効なレコードデータパターンを持つ一時データを使った完全な例です:
</para>
<programlisting><![CDATA[<filter-def name="effectiveDate">
@@ -105,8 +107,8 @@
</class>]]></programlisting>
<para>
- ��Ɍ��݂̗L�����R�[�h��ԋp���邱�Ƃ�ۏ��邽�߂ɁA
- �P���ɁA�Ј��f�[�^�̌������O�ɃZ�b�V������̃t�B���^��L���ɂ��܂��B
+ 常に現在の有効レコードを返却することを保証するために、
+ 単純に、社員データの検索より前にセッション上のフィルタを有効にします。
</para>
@@ -119,16 +121,16 @@
]]></programlisting>
<para>
- ��L��HQL�ł́A���ʂ̋����̐���ɂ��Ė����I�ɐG�ꂽ�����ł����A
- �L���ɂȂ��Ă���t�B���^�̂������ŁA���̃N�G���͋�����100���h���ȏ�̌���̎Ј�������Ԃ��܂��B
+ 上記のHQLでは、結果の給料の制約について明示的に触れただけですが、
+ 有効になっているフィルタのおかげで、このクエリは給料が100万ドル以上の現役の社員だけを返します。
</para>
<para>
- (HQL�����[�h�t�F�b�`�Łj�O���������t�B���^��g�����Ȃ�A
- �����̕����ɒ��ӂ��Ă��������B
+ (HQLかロードフェッチで)外部結合を持つフィルタを使うつもりなら、
+ 条件式の方向に注意してください。
- ����͍��O�������̂��߂ɐݒ肷��̂��ł���S�ł��B
- ��ʓI�ɁA���Z�q�̌�J�������ɑ����čŏ��̃p�����[�^��z�u���Ă��������B
+ これは左外部結合のために設定するのが最も安全です。
+ 一般的に、演算子の後カラム名に続けて最初のパラメータを配置してください。
</para>
</sect1>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/inheritance_mapping.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/inheritance_mapping.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/inheritance_mapping.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,67 +1,69 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="inheritance">
- <title>�p���}�b�s���O</title>
+ <title>継承マッピング</title>
<sect1 id="inheritance-strategies" revision="3">
- <title>3�̐헪</title>
+ <title>3つの戦略</title>
<para>
- Hibernate��3�̊�{�I�Ȍp���̃}�b�s���O�헪��T�|�[�g���܂��B
+ Hibernateは3つの基本的な継承のマッピング戦略をサポートします。
</para>
<itemizedlist>
<listitem>
<para>
- �N���X�K�w���Ƃ̃e�[�u���itable-per-class-hierarchy�j
+ クラス階層ごとのテーブル(table-per-class-hierarchy)
</para>
</listitem>
<listitem>
<para>
- �T�u�N���X���Ƃ̃e�[�u���itable-per-subclass�j
+ サブクラスごとのテーブル(table-per-subclass)
</para>
</listitem>
<listitem>
<para>
- ��ۃN���X���Ƃ̃e�[�u���itable-per-concrete-class�j
+ 具象クラスごとのテーブル(table-per-concrete-class)
</para>
</listitem>
</itemizedlist>
<para>
- ������4�ڂɁAHibernate�͂킸���ɈقȂ鐫���������|�����[�t�B�Y����T�|�[�g���܂��B
+ 加えて4つ目に、Hibernateはわずかに異なる性質を持ったポリモーフィズムをサポートします。
</para>
<itemizedlist>
<listitem>
<para>
- �ÖٓI�|�����[�t�B�Y��
+ 暗黙的ポリモーフィズム
</para>
</listitem>
</itemizedlist>
<para>
- ����̌p���K�w�̈قȂ�u�����`�ɑ��ĈقȂ�}�b�s���O�헪��g�����Ƃ��ł��܂��B
- ���̏ꍇ�ɂ͑S�̂̊K�w�ɓn��|�����[�t�B�Y����������邽�߂ɈÖٓI�|�����[�t�B�Y����g�p���܂��B
- �������AHibernate�͓������[�g <literal><class></literal> �v�f���
- <literal><subclass></literal> �}�b�s���O�A<literal><joined-subclass></literal> �}�b�s���O�A
- <literal><union-subclass></literal> �}�b�s���O�̓����g�p��T�|�[�g���Ă��܂���B
- <literal><subclass></literal> �v�f�� <literal><join></literal> �v�f��g�ݍ��킹�邱�ƂŁA
- ���� <literal><class></literal> �v�f��ł� table-per-hierarchy �헪��
- table-per-subclass �헪�̓����g�p�͉\�ł��B���̗���Ă��������B
+ 同一の継承階層の異なるブランチに対して異なるマッピング戦略を使うことができます。
+ その場合には全体の階層に渡るポリモーフィズムを実現するために暗黙的ポリモーフィズムを使用します。
+ しかし、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 戦略の同時使用は可能です。次の例を見てください。
</para>
<para>
- <literal>subclass</literal>, <literal>union-subclass</literal> ��
- <literal>joined-subclass</literal> �}�b�s���O���̃}�b�s���O�h�L�������g�ɒ�`���邱�Ƃ��o���A
- <literal>hibernate-mapping</literal> �̒����ɔz�u���܂��B
- ����͐V�����}�b�s���O�t�@�C����lj����邾���ŁA�N���X�K�w��g���ł���Ƃ������Ƃł��B
- ���炩���߃}�b�v�����X�[�p�[�N���X��w�肵�āA�T�u�N���X�}�b�s���O�� <literal>extends</literal>
- ������L�q���Ȃ���Ȃ�܂���B
- ���ӁF���̓����ɂ��A�ȑO�̓}�b�s���O�E�h�L�������g�̏��Ԃ��d�v�ł����B
- Hibernate3����́Aextends�L�[���[�h��g���ꍇ�A�}�b�s���O�h�L�������g�̏��Ԃ͖��ɂȂ�܂���B
+ <literal>subclass</literal>, <literal>union-subclass</literal> と
+ <literal>joined-subclass</literal> マッピングを複数のマッピングドキュメントに定義することが出来、
+ <literal>hibernate-mapping</literal> の直下に配置します。
+ これは新しいマッピングファイルを追加するだけで、クラス階層を拡張できるということです。
+ あらかじめマップしたスーパークラスを指定して、サブクラスマッピングに <literal>extends</literal>
+ 属性を記述しなければなりません。
+ 注意:この特徴により、以前はマッピング・ドキュメントの順番が重要でした。
+ Hibernate3からは、extendsキーワードを使う場合、マッピングドキュメントの順番は問題になりません。
- �P�̃}�b�s���O�t�@�C����ŏ��ԕt����s���Ƃ��́A
- �ˑR�Ƃ��āA�T�u�N���X���`����O�ɃX�[�p�[�N���X���`����K�v������܂��B)
+ 1つのマッピングファイル内で順番付けを行うときは、
+ 依然として、サブクラスを定義する前にスーパークラスを定義する必要があります。)
</para>
<programlisting><![CDATA[
@@ -73,13 +75,13 @@
<sect2 id="inheritance-tableperclass" >
- <title>�N���X�K�w���Ƃ̃e�[�u���itable-per-class-hierarchy�j</title>
+ <title>クラス階層ごとのテーブル(table-per-class-hierarchy)</title>
<para>
- �Ⴆ�A�C���^�[�t�F�C�X <literal>Payment</literal> �ƁA������������
- <literal>CreditCardPayment</literal>�A<literal>CashPayment</literal>�A
- <literal>ChequePayment</literal> ������Ƃ��܂��B�K�w���Ƃ̃e�[�u���}�b�s���O��
- �ȉ��̂悤�ɂȂ�܂��B
+ 例えば、インターフェイス <literal>Payment</literal> と、それを実装した
+ <literal>CreditCardPayment</literal>、<literal>CashPayment</literal>、
+ <literal>ChequePayment</literal> があるとします。階層ごとのテーブルマッピングは
+ 以下のようになります。
</para>
<programlisting><![CDATA[<class name="Payment" table="PAYMENT">
@@ -102,19 +104,19 @@
</class>]]></programlisting>
<para>
- ���傤�Lj�̃e�[�u�����K�v�ł��B
- ���̃}�b�s���O�헪�ɂ͈�傫�Ȑ���������܂��B
- <literal>CCTYPE</literal> �̂悤�ȁA�T�u�N���X�Ő錾���ꂽ�J������ <literal>NOT NULL</literal>
- ������Ă܂���B
+ ちょうど一つのテーブルが必要です。
+ このマッピング戦略には一つ大きな制限があります。
+ <literal>CCTYPE</literal> のような、サブクラスで宣言されたカラムは <literal>NOT NULL</literal>
+ 制約を持てません。
</para>
</sect2>
<sect2 id="inheritance-tablepersubclass">
- <title>�T�u�N���X���Ƃ̃e�[�u���itable-per-subclass�j</title>
+ <title>サブクラスごとのテーブル(table-per-subclass)</title>
<para>
- table-per-subclass �}�b�s���O�͈ȉ��̂悤�ɂȂ�܂��B
+ table-per-subclass マッピングは以下のようになります。
</para>
<programlisting><![CDATA[<class name="Payment" table="PAYMENT">
@@ -139,24 +141,24 @@
</class>]]></programlisting>
<para>
- ���̃}�b�s���O�ɂ�4�̃e�[�u�����K�v�ł��B3�̃T�u�N���X�e�[�u����
- �X�[�p�[�N���X�e�[�u���Ƃ̊֘A������L�[�����Ă��܂�
- �i���ہA�W���f����͈�Έ�֘A�ł��j�B
+ このマッピングには4つのテーブルが必要です。3つのサブクラステーブルは
+ スーパークラステーブルとの関連を示す主キーを持っています
+ (実際、関係モデル上は一対一関連です)。
</para>
</sect2>
<sect2 id="inheritance-tablepersubclass-discriminator" revision="2">
- <title>�ٕʎq��p���� table-per-subclass</title>
+ <title>弁別子を用いた table-per-subclass</title>
<para>
- Hibernate�� table-per-subclass �����́Adiscriminator�J������K�v�Ƃ��Ȃ����Ƃ�o���Ă����Ă��������B
- Hibernate�ȊO��O/R�}�b�p�[�́Atable-per-subclass �ɈقȂ������p���܂��B
- ����́A�X�[�p�[�N���X�̃e�[�u���Ƀ^�C�vdiscriminator�J������K�v�Ƃ��܂��B
- ���̃A�v���[�`�͎���������ɂȂ�܂����A�W�̎��_���猩��ƁA��萳�m�Ȃ�̂ł��B
- table-per-subclass �헪��discriminator�J������g��������A
- <literal><subclass></literal> �� <literal><join></literal>
- ��ȉ��̂悤�ɑg�ݍ��킹�Ďg���Ă��������B
+ Hibernateの table-per-subclass 実装は、discriminatorカラムを必要としないことを覚えておいてください。
+ Hibernate以外のO/Rマッパーは、table-per-subclass に異なる実装を用います。
+ それは、スーパークラスのテーブルにタイプdiscriminatorカラムを必要とします。
+ このアプローチは実装が困難になりますが、関係の視点から見ると、より正確なものです。
+ table-per-subclass 戦略でdiscriminatorカラムを使いたければ、
+ <literal><subclass></literal> と <literal><join></literal>
+ を以下のように組み合わせて使ってください。
</para>
<programlisting><![CDATA[<class name="Payment" table="PAYMENT">
@@ -188,19 +190,19 @@
</class>]]></programlisting>
<para>
- �I�v�V������ <literal>fetch="select"</literal> �錾�́A
- �X�[�p�[�N���X�̃N�G�����s���ɊO��������g���āA
- �T�u�N���X�� <literal>ChequePayment</literal> �f�[�^��擾���Ȃ��悤�Ɏw�肷�邽�߂̂�̂ł��B
+ オプションの <literal>fetch="select"</literal> 宣言は、
+ スーパークラスのクエリ実行時に外部結合を使って、
+ サブクラスの <literal>ChequePayment</literal> データを取得しないように指定するためのものです。
</para>
</sect2>
<sect2 id="inheritance-mixing-tableperclass-tablepersubclass">
- <title>table-per-subclass �� table-per-class-hierarchy �̍���</title>
+ <title>table-per-subclass と table-per-class-hierarchy の混合</title>
<para>
- ���̃A�v���[�`��g�p����ƁAtable-per-hierarchy �� table-per-subclass �헪��
- �g�ݍ��킹�鎖��\�ł��B
+ このアプローチを使用すると、table-per-hierarchy と table-per-subclass 戦略を
+ 組み合わせる事も可能です。
</para>
<programlisting><![CDATA[<class name="Payment" table="PAYMENT">
@@ -225,8 +227,8 @@
</class>]]></programlisting>
<para>
- ������̃}�b�s���O�헪�ł����Ă�A���[�g�ł��� <literal>Payment</literal> �N���X�ւ�
- �|�����[�t�B�b�N�Ȋ֘A�� <literal><many-to-one></literal> ��g���ă}�b�s���O���܂��B
+ いずれのマッピング戦略であっても、ルートである <literal>Payment</literal> クラスへの
+ ポリモーフィックな関連は <literal><many-to-one></literal> を使ってマッピングします。
</para>
<programlisting><![CDATA[<many-to-one name="payment" column="PAYMENT_ID" class="Payment"/>]]></programlisting>
@@ -234,11 +236,11 @@
</sect2>
<sect2 id="inheritance-tableperconcrete" revision="2">
- <title>��ۃN���X���Ƃ̃e�[�u���itable-per-concrete-class�j</title>
+ <title>具象クラスごとのテーブル(table-per-concrete-class)</title>
<para>
- table-per-concrete-class �헪�̃}�b�s���O�ɑ���A�v���[�`�́A2����܂��B
- 1�ڂ� <literal><union-subclass></literal> �𗘗p������@�ł��B
+ table-per-concrete-class 戦略のマッピングに対するアプローチは、2つあります。
+ 1つ目は <literal><union-subclass></literal> を利用する方法です。
</para>
<programlisting><![CDATA[<class name="Payment">
@@ -260,32 +262,32 @@
</class>]]></programlisting>
<para>
- �T�u�N���X���Ƃ�3�̃e�[�u�����K�v�ł��B���ꂼ��̃e�[�u���́A�p���v���p�e�B��܂A
- �N���X�̑S�Ẵv���p�e�B�ɑ���J�������`���܂��B
+ サブクラスごとに3つのテーブルが必要です。それぞれのテーブルは、継承プロパティを含んだ、
+ クラスの全てのプロパティに対するカラムを定義します。
</para>
<para>
- ���̃A�v���[�`�ɂ͐���������܂��B
- ����́A�v���p�e�B���X�[�p�[�N���X�Ƀ}�b�s���O����Ă����ꍇ�A
- �S�ẴT�u�N���X�ɂ����ăJ�������������łȂ���Ȃ�Ȃ��Ƃ�����̂ł��B
- �iHibernate�̍���̃����[�X�Ŋɘa����邩�����܂���j�B
- <union-subclass> ��g���� table-per-concrete-class �헪�ł͎��ʎq�����헪��g�p�ł��܂���B
- ��L�[�����邽�߂̃V�[�h�́A�S�Ă� union subclass �̊K�w��ŋ��L����K�v�����邩��ł��B
+ このアプローチには制限があります。
+ それは、プロパティがスーパークラスにマッピングされていた場合、
+ 全てのサブクラスにおいてカラム名が同じでなければならないというものです。
+ (Hibernateの今後のリリースで緩和されるかもしれません)。
+ <union-subclass> を使った table-per-concrete-class 戦略では識別子生成戦略を使用できません。
+ 主キーを生成するためのシードは、全ての union subclass の階層内で共有する必要があるからです。
</para>
<para>
- ����X�[�p�[�N���X�����ۃN���X�Ȃ�A<literal>abstract="true"</literal>�ƃ}�b�s���O���܂��B
- ������A�X�[�p�[�N���X�����ۃN���X�łȂ��Ȃ�A�X�[�p�[�N���X�̃C���X�^���X��
- �ێ����邽�߂̃e�[�u���̒lj����K�v�ƂȂ�܂�(��̗�ł̃f�t�H���g�� <literal>PAYMENT</literal> )�B
+ もしスーパークラスが抽象クラスなら、<literal>abstract="true"</literal>とマッピングします。
+ もちろん、スーパークラスが抽象クラスでないなら、スーパークラスのインスタンスを
+ 保持するためのテーブルの追加が必要となります(上の例でのデフォルトは <literal>PAYMENT</literal> )。
</para>
</sect2>
<sect2 id="inheritance-tableperconcreate-polymorphism">
- <title>�ÖٓI�|�����[�t�B�Y����p���� table-per-concrete-class</title>
+ <title>暗黙的ポリモーフィズムを用いた table-per-concrete-class</title>
<para>
- �����̃A�v���[�`�͈ÖٓI�|�����[�t�B�Y���̎g�p�ł��B
+ もう一つのアプローチは暗黙的ポリモーフィズムの使用です。
</para>
<programlisting><![CDATA[<class name="CreditCardPayment" table="CREDIT_PAYMENT">
@@ -313,21 +315,21 @@
</class>]]></programlisting>
<para>
- <literal>Payment</literal> �C���^�[�t�F�C�X���ǂ��ɂ�����I�Ɏ�����Ă��Ȃ����Ƃɒ��ӂ��Ă��������B
- �����āA<literal>Payment</literal> �v���p�e�B�����ꂼ��̃T�u�N���X�Ƀ}�b�s���O����Ă��邱�Ƃɂ���ӂ��Ă��������B
- ����d����������̂ł���AXML�G���e�B�e�B�̗��p��l���Ă��������B
- �i��F <literal>DOCTYPE</literal> �錾�ɂ����� <literal>[ <!ENTITY allproperties SYSTEM "allproperties.xml"> ]</literal>
- �ƁA�}�b�s���O�ɂ����� <literal>&allproperties;</literal>�j
+ <literal>Payment</literal> インターフェイスがどこにも明示的に示されていないことに注意してください。
+ そして、<literal>Payment</literal> プロパティがそれぞれのサブクラスにマッピングされていることにも注意してください。
+ もし重複を避けたいのであれば、XMLエンティティの利用を考えてください。
+ (例: <literal>DOCTYPE</literal> 宣言における <literal>[ <!ENTITY allproperties SYSTEM "allproperties.xml"> ]</literal>
+ と、マッピングにおける <literal>&allproperties;</literal>)
</para>
<para>
- ���̃A�v���[�`�̌��_�́AHibernate���|�����[�t�B�b�N�ȃN�G���̎��s����SQL <literal>UNION</literal>
- �����Ȃ��_�ł��B
+ このアプローチの欠点は、Hibernateがポリモーフィックなクエリの実行時にSQL <literal>UNION</literal>
+ を生成しない点です。
</para>
<para>
- ���̃}�b�s���O�헪�ɑ��ẮA<literal>Payment</literal> �ւ̃|�����[�t�B�b�N�Ȋ֘A��
- �ʏ�A<literal><any></literal> ��g���ă}�b�s���O����܂��B
+ このマッピング戦略に対しては、<literal>Payment</literal> へのポリモーフィックな関連は
+ 通常、<literal><any></literal> を使ってマッピングされます。
</para>
<programlisting><![CDATA[<any name="payment" meta-type="string" id-type="long">
@@ -341,15 +343,15 @@
</sect2>
<sect2 id="inheritace-mixingpolymorphism">
- <title>���̌p���}�b�s���O�ƈÖٓI�|�����[�t�B�Y���̑g�ݍ��킹</title>
+ <title>他の継承マッピングと暗黙的ポリモーフィズムの組み合わせ</title>
<para>
- ���̃}�b�s���O�ɂ��Ă̍X�Ȃ钍�ӓ_������܂��B
- �T�u�N���X�����g�� <literal><class></literal> �v�f�Ƃ��ă}�b�s���O���Ă���̂ŁA
- �i���� <literal>Payment</literal> �͒P�Ȃ�C���^�[�t�F�C�X�Ȃ̂Łj�A
- ���ꂼ��̃T�u�N���X�͊ȒP�ɂ��̑��̌p���K�w�̈ꕔ�ƂȂ�܂��B
- �i������A���܂łǂ��� <literal>Payment</literal> �C���^�[�t�F�C�X�ɑ���|�����[�t�B�b�N�ȃN�G��
- ��g�p���邱�Ƃ��ł��܂��j
+ このマッピングについての更なる注意点があります。
+ サブクラスが自身を <literal><class></literal> 要素としてマッピングしているので、
+ (かつ <literal>Payment</literal> は単なるインターフェイスなので)、
+ それぞれのサブクラスは簡単にその他の継承階層の一部となります。
+ (しかも、今までどおり <literal>Payment</literal> インターフェイスに対するポリモーフィックなクエリ
+ を使用することができます)
</para>
<programlisting><![CDATA[<class name="CreditCardPayment" table="CREDIT_PAYMENT">
@@ -381,14 +383,14 @@
</class>]]></programlisting>
<para>
- �����x�q�ׂ܂����A<literal>Payment</literal> �͖����I�ɒ�`����܂���B
- ����A<literal>Payment</literal> �C���^�[�t�F�C�X�ɑ��ăN�G������s����Ȃ�
- �i�Ⴆ�� <literal>from Payment</literal> �߂�g���āj�A
- Hibernate�͎����I�� <literal>CreditCardPayment</literal>
- �i��CreditCardPayment�̃T�u�N���X�A<literal>Payment</literal> �̎����ł��邽�߁j�A
- ����сA<literal>CashPayment</literal> �A<literal>ChequePayment</literal>
- �̃C���X�^���X��Ԃ��܂��B
- <literal>NonelectronicTransaction</literal> �C���X�^���X�͕Ԃ��܂���B
+ もう一度述べますが、<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> インスタンスは返しません。
</para>
</sect2>
@@ -396,21 +398,21 @@
</sect1>
<sect1 id="inheritance-limitations">
- <title>����</title>
+ <title>制限</title>
<para>
- table-per-concrete-class �}�b�s���O�헪�ւ́u�ÖٓI�|�����[�t�B�Y���v�A�v���[�`�ɂ�
- �������̐���������܂��B<literal><union-subclass></literal> �}�b�s���O�ɑ��Ă�
- ������߂̐���������܂��B
+ table-per-concrete-class マッピング戦略への「暗黙的ポリモーフィズム」アプローチには
+ いくつかの制限があります。<literal><union-subclass></literal> マッピングに対しても
+ 少し弱めの制限があります。
</para>
<para>
- ���̃e�[�u���ɁAHibernate�ɂ�����table-per-concrete-class�}�b�s���O��
- ������ÖٓI�|�����[�t�B�Y���̐��������܂��B
+ 次のテーブルに、Hibernateにおけるtable-per-concrete-classマッピングの
+ 制限や暗黙的ポリモーフィズムの制限を示します。
</para>
<table frame="topbot">
- <title>�p���}�b�s���O�̋@�\</title>
+ <title>継承マッピングの機能</title>
<tgroup cols='8' align='left' colsep='1' rowsep='1'>
<colspec colname='c1' colwidth="1*"/>
<colspec colname='c2' colwidth="1*"/>
@@ -422,15 +424,15 @@
<colspec colname='c8' colwidth="1*"/>
<thead>
<row>
- <entry>�p���헪</entry>
- <entry>���Έ�̃|�����[�t�B�Y��</entry>
- <entry>��Έ�̃|�����[�t�B�Y��</entry>
- <entry>��Α��̃|�����[�t�B�Y��</entry>
- <entry>���Α��̃|�����[�t�B�Y��</entry>
- <entry>�|�����[�t�B�Y����g����<literal>load()/get()</literal></entry>
- <entry>�|�����[�t�B�Y����g�����N�G��</entry>
- <entry>�|�����[�t�B�Y����g��������</entry>
- <entry>�O�������ɂ��t�F�b�`</entry>
+ <entry>継承戦略</entry>
+ <entry>多対一のポリモーフィズム</entry>
+ <entry>一対一のポリモーフィズム</entry>
+ <entry>一対多のポリモーフィズム</entry>
+ <entry>多対多のポリモーフィズム</entry>
+ <entry>ポリモーフィズムを使った<literal>load()/get()</literal></entry>
+ <entry>ポリモーフィズムを使ったクエリ</entry>
+ <entry>ポリモーフィズムを使った結合</entry>
+ <entry>外部結合によるフェッチ</entry>
</row>
</thead>
<tbody>
@@ -443,7 +445,7 @@
<entry><literal>s.get(Payment.class, id)</literal></entry>
<entry><literal>from Payment p</literal></entry>
<entry><literal>from Order o join o.payment p</literal></entry>
- <entry><emphasis>�T�|�[�g</emphasis></entry>
+ <entry><emphasis>サポート</emphasis></entry>
</row>
<row>
<entry>table per subclass</entry>
@@ -454,7 +456,7 @@
<entry><literal>s.get(Payment.class, id)</literal></entry>
<entry><literal>from Payment p</literal></entry>
<entry><literal>from Order o join o.payment p</literal></entry>
- <entry><emphasis>�T�|�[�g</emphasis></entry>
+ <entry><emphasis>サポート</emphasis></entry>
</row>
<row>
<entry>table per concrete-class (union-subclass)</entry>
@@ -465,18 +467,18 @@
<entry><literal>s.get(Payment.class, id)</literal></entry>
<entry><literal>from Payment p</literal></entry>
<entry><literal>from Order o join o.payment p</literal></entry>
- <entry><emphasis>�T�|�[�g</emphasis></entry>
+ <entry><emphasis>サポート</emphasis></entry>
</row>
<row>
<entry>table per concrete class (implicit polymorphism)</entry>
<entry><literal><any></literal></entry>
- <entry><emphasis>�T�|�[�g���Ă��܂���</emphasis></entry>
- <entry><emphasis>�T�|�[�g���Ă��܂���</emphasis></entry>
+ <entry><emphasis>サポートしていません</emphasis></entry>
+ <entry><emphasis>サポートしていません</emphasis></entry>
<entry><literal><many-to-any></literal></entry>
<entry><literal>s.createCriteria(Payment.class).add( Restrictions.idEq(id) ).uniqueResult()</literal></entry>
<entry><literal>from Payment p</literal></entry>
- <entry><emphasis>�T�|�[�g���Ă��܂���</emphasis></entry>
- <entry><emphasis>�T�|�[�g���Ă��܂���</emphasis></entry>
+ <entry><emphasis>サポートしていません</emphasis></entry>
+ <entry><emphasis>サポートしていません</emphasis></entry>
</row>
</tbody>
</tgroup>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/performance.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/performance.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/performance.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,133 +1,135 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="performance">
- <title>�p�t�H�[�}���X�̉��P</title>
+ <title>パフォーマンスの改善</title>
<sect1 id="performance-fetching" revision="2">
- <title>�t�F�b�`�헪</title>
+ <title>フェッチ戦略</title>
<para>
- <emphasis>�t�F�b�`�헪</emphasis> �́A�A�v���P�[�V�������֘A��i�r�Q�[�g����K�v������
- �Ƃ��ɁAHibernate���֘A�I�u�W�F�N�g�����邽�߂Ɏg�p����헪�ł��B�t�F�b�`�헪��O/R�}�b�s���O��
- ���^�f�[�^�ɐ錾���邩�A�����HQL�A <literal>Criteria</literal> �N�G���ŃI�[�o�[���C�h���܂��B
+ <emphasis>フェッチ戦略</emphasis> は、アプリケーションが関連をナビゲートする必要がある
+ ときに、Hibernateが関連オブジェクトを復元するために使用する戦略です。フェッチ戦略はO/Rマッピングの
+ メタデータに宣言するか、特定のHQL、 <literal>Criteria</literal> クエリでオーバーライドします。
</para>
<para>
- Hibernate3�͎��Ɏ����t�F�b�`�헪���`���Ă��܂��B
+ Hibernate3は次に示すフェッチ戦略を定義しています。
</para>
<itemizedlist>
<listitem>
<para>
- <emphasis>�����t�F�b�`</emphasis> - Hibernate�� <literal>OUTER JOIN</literal> ��g���āA
- �֘A����C���X�^���X��R���N�V������P�� <literal>SELECT</literal>
- �ŕ������܂��B
+ <emphasis>結合フェッチ</emphasis> - Hibernateは <literal>OUTER JOIN</literal> を使って、
+ 関連するインスタンスやコレクションを1つの <literal>SELECT</literal>
+ で復元します。
</para>
</listitem>
<listitem>
<para>
- <emphasis>�Z���N�g�t�F�b�`</emphasis> - 2��ڂ� <literal>SELECT</literal>
- �Ŋ֘A����G���e�B�e�B��R���N�V���������܂��B <literal>lazy="false"</literal>
- �Ŗ����I�ɒx���t�F�b�`���ɂ��Ȃ���A����2��ڂ�select�͎��ۂ�
- �֘A�ɃA�N�Z�X�����Ƃ��̂ݎ��s�����ł��傤�B
+ <emphasis>セレクトフェッチ</emphasis> - 2回目の <literal>SELECT</literal>
+ で関連するエンティティやコレクションを復元します。 <literal>lazy="false"</literal>
+ で明示的に遅延フェッチを無効にしなければ、この2回目のselectは実際に
+ 関連にアクセスしたときのみ実行されるでしょう。
</para>
</listitem>
<listitem>
<para>
- <emphasis>�T�u�Z���N�g�t�F�b�`</emphasis> - 2��ڂ� <literal>SELECT</literal>
- �ŁA���O�̃N�G����t�F�b�`�ŕ����������ׂĂ̗v�f�Ɋ֘A����R���N�V������
- �������܂��B <literal>lazy="false"</literal>
- �Ŗ����I�ɒx���t�F�b�`���ɂ��Ȃ���A����2��ڂ�select�͎��ۂ�
- �֘A�ɃA�N�Z�X�����Ƃ��̂ݎ��s�����ł��傤�B
+ <emphasis>サブセレクトフェッチ</emphasis> - 2回目の <literal>SELECT</literal>
+ で、直前のクエリやフェッチで復元したすべての要素に関連するコレクションを
+ 復元します。 <literal>lazy="false"</literal>
+ で明示的に遅延フェッチを無効にしなければ、この2回目のselectは実際に
+ 関連にアクセスしたときのみ実行されるでしょう。
</para>
</listitem>
<listitem>
<para>
- <emphasis>�o�b�`�t�F�b�`</emphasis> - �Z���N�g�t�F�b�`�̂��߂̍œK�����ꂽ�헪
- - Hibernate�̓G���e�B�e�B�̃C���X�^���X��R���N�V�����̈�Q��1���
- <literal>SELECT</literal> �ŕ������܂��B����͎�L�[��O���L�[�̃��X�g��w�肷�邱�Ƃ�
- �ɂ��s���܂��B
+ <emphasis>バッチフェッチ</emphasis> - セレクトフェッチのための最適化された戦略
+ - Hibernateはエンティティのインスタンスやコレクションの一群を1回の
+ <literal>SELECT</literal> で復元します。これは主キーや外部キーのリストを指定することに
+ により行います。
</para>
</listitem>
</itemizedlist>
<para>
- Hibernate�͎��Ɏ����헪�Ƃ��ʂ��܂��B
+ Hibernateは次に示す戦略とも区別をします。
</para>
<itemizedlist>
<listitem>
<para>
- <emphasis>�����t�F�b�`</emphasis> - ���L�҂̃I�u�W�F�N�g�����[�h���ꂽ�Ƃ��ɁA
- �֘A�A�R���N�V�����͑����Ƀt�F�b�`����܂��B
+ <emphasis>即時フェッチ</emphasis> - 所有者のオブジェクトがロードされたときに、
+ 関連、コレクションは即時にフェッチされます。
</para>
</listitem>
<listitem>
<para>
- <emphasis>�x���R���N�V�����t�F�b�`</emphasis> - �A�v���P�[�V�������R���N�V������
- ���đ����s�����Ƃ��ɃR���N�V������t�F�b�`���܂��B
- (����̓R���N�V�����ɑ���f�t�H���g�̓���ł�)
+ <emphasis>遅延コレクションフェッチ</emphasis> - アプリケーションがコレクションに
+ 対して操作を行ったときにコレクションをフェッチします。
+ (これはコレクションに対するデフォルトの動作です)
</para>
</listitem>
<listitem>
<para>
- <emphasis>"���ʂȒx��"�R���N�V�����t�F�b�`</emphasis> - �R���N�V�����̗v�f
- �P�P���Ɨ����āA�K�v�ȂƂ��Ƀf�[�^�x�[�X����擾����܂��B
- Hibernate�͕K�v�Ȃ��Ȃ�A�R���N�V�����S�̂������Ƀt�F�b�`���邱�Ƃ�
- ���܂��i�ƂĂ�傫�ȃR���N�V�����ɓK���Ă��܂��j�B
+ <emphasis>"特別な遅延"コレクションフェッチ</emphasis> - コレクションの要素
+ 1つ1つが独立して、必要なときにデータベースから取得されます。
+ Hibernateは必要ないならば、コレクション全体をメモリにフェッチすることは
+ 避けます(とても大きなコレクションに適しています)。
</para>
</listitem>
<listitem>
<para>
- <emphasis>�v���L�V�t�F�b�`</emphasis> - �P��l�֘A�́A���ʎq��getter�ȊO��
- ���\�b�h���֘A�I�u�W�F�N�g�ŌĂяo�����Ƃ��Ƀt�F�b�`����܂��B
+ <emphasis>プロキシフェッチ</emphasis> - 単一値関連は、識別子のgetter以外の
+ メソッドが関連オブジェクトで呼び出されるときにフェッチされます。
</para>
</listitem>
<listitem>
<para>
- <emphasis>"�v���L�V�Ȃ�"�t�F�b�`</emphasis> - �P��l�֘A�́A�C���X�^���X�ϐ���
- �A�N�Z�X���ꂽ�Ƃ��Ƀt�F�b�`����܂��B�v���L�V�t�F�b�`�Ɣ�r����ƁA���̕��@��
- �x���̓x���������Ȃ��i�֘A�͎��ʎq�ɃA�N�Z�X���������ł�t�F�b�`����܂��j
- �ł����A��蓧�ߓI�ŁA�A�v���P�[�V�����Ƀv���L�V�����݂��Ȃ��悤�Ɍ����܂��B
- ���̕��@�̓r���h���̃o�C�g�R�[�h�g�ݍ��݂��K�v�ɂȂ�A�g����ʂ͂܂�ł��B
+ <emphasis>"プロキシなし"フェッチ</emphasis> - 単一値関連は、インスタンス変数に
+ アクセスされたときにフェッチされます。プロキシフェッチと比較すると、この方法は
+ 遅延の度合いが少ない(関連は識別子にアクセスしただけでもフェッチされます)
+ ですが、より透過的で、アプリケーションにプロキシが存在しないように見せます。
+ この方法はビルド時のバイトコード組み込みが必要になり、使う場面はまれです。
</para>
</listitem>
<listitem>
<para>
- <emphasis>�x�������t�F�b�`</emphasis> - ������P��l�֘A�́A�C���X�^���X�ϐ��ɃA�N�Z�X����
- �Ƃ��Ƀt�F�b�`����܂��B���̕��@�̓r���h���̃o�C�g�R�[�h�g�ݍ��݂��K�v�ɂȂ�A
- �g����ʂ͂܂�ł��B
+ <emphasis>遅延属性フェッチ</emphasis> - 属性や単一値関連は、インスタンス変数にアクセスした
+ ときにフェッチされます。この方法はビルド時のバイトコード組み込みが必要になり、
+ 使う場面はまれです。
</para>
</listitem>
</itemizedlist>
<para>
- ��̒��s����T�O������܂�: <emphasis>����</emphasis> �֘A��t�F�b�`���邩�A
- �����āA <emphasis>�ǂ������</emphasis> �t�F�b�`���邩�i�ǂ��SQL��g���āj�B
- �����������Ȃ��ł��������I <literal>fetch</literal> �̓p�t�H�[�}���X�`���[�j���O�Ɏg���܂��B
- <literal>lazy</literal> �͂���N���X�̕������ꂽ�C���X�^���X�̂����A�ǂ̃f�[�^����
- �g�p�\�ɂ��邩�̎�茈�߂��`���܂��B
+ 二つの直行する概念があります: <emphasis>いつ</emphasis> 関連をフェッチするか、
+ そして、 <emphasis>どうやって</emphasis> フェッチするか(どんなSQLを使って)。
+ これらを混同しないでください! <literal>fetch</literal> はパフォーマンスチューニングに使います。
+ <literal>lazy</literal> はあるクラスの分離されたインスタンスのうち、どのデータを常に
+ 使用可能にするかの取り決めを定義します。
</para>
<sect2 id="performance-fetching-lazy">
- <title>�x���֘A�̓���</title>
+ <title>遅延関連の働き</title>
<para>
- �f�t�H���g�ł́AHibernate3�̓R���N�V�����ɑ��Ă͒x���Z���N�g�t�F�b�`��g���A
- �P��l�֘A�ɂ͒x���v���L�V�t�F�b�`��g���܂��B�����̃f�t�H���g����͂قڂ��ׂĂ�
- �A�v���P�[�V�����̂قڂ��ׂĂ̊֘A�ňӖ�������܂��B
+ デフォルトでは、Hibernate3はコレクションに対しては遅延セレクトフェッチを使い、
+ 単一値関連には遅延プロキシフェッチを使います。これらのデフォルト動作はほぼすべての
+ アプリケーションのほぼすべての関連で意味があります。
</para>
<para>
- <emphasis>��:</emphasis>
- <literal>hibernate.default_batch_fetch_size</literal> ��Z�b�g�����Ƃ��́AHibernate��
- �x���t�F�b�`�̂��߂̃o�b�`�t�F�b�`�œK����g���ł��傤
- �i���̍œK���͂��ׂ������x���ŗL���ɂ��邱�Ƃ�o���܂��j�B
+ <emphasis>注:</emphasis>
+ <literal>hibernate.default_batch_fetch_size</literal> をセットしたときは、Hibernateは
+ 遅延フェッチのためのバッチフェッチ最適化を使うでしょう
+ (この最適化はより細かいレベルで有効にすることも出来ます)。
</para>
<para>
- �������A�x���t�F�b�`�͒m���Ă����Ȃ���Ȃ�Ȃ���̖�肪����܂��B
- Hibernate��session��I�[�v�����Ă���R���e�L�X�g�̊O����x���֘A�ɃA�N�Z�X����ƁA
- ��O���������܂��B��F
+ しかし、遅延フェッチは知っておかなければならない一つの問題があります。
+ Hibernateのsessionをオープンしているコンテキストの外から遅延関連にアクセスすると、
+ 例外が発生します。例:
</para>
<programlisting><![CDATA[s = sessions.openSession();
@@ -143,38 +145,38 @@
Integer accessLevel = (Integer) permissions.get("accounts"); // Error!]]></programlisting>
<para>
- <literal>Session</literal> ���N���[�Y���ꂽ�Ƃ��Apermissions�R���N�V������
- ����������Ă��Ȃ����߁A���̃R���N�V�����͎��g�̏�Ԃ��[�h�ł��܂���B
- <emphasis>Hibernate�͐藣���ꂽ�I�u�W�F�N�g�̒x���������̓T�|�[�g
- ���Ă��܂���</emphasis> �B�C�����@�Ƃ��āA�R���N�V��������ǂݍ��݂�s���R�[�h��
- �g�����U�N�V������R�~�b�g���钼�O�Ɉړ������܂��B
+ <literal>Session</literal> がクローズされたとき、permissionsコレクションは
+ 初期化されていないため、このコレクションは自身の状態をロードできません。
+ <emphasis>Hibernateは切り離されたオブジェクトの遅延初期化はサポート
+ していません</emphasis> 。修正方法として、コレクションから読み込みを行うコードを
+ トランザクションをコミットする直前に移動させます。
</para>
<para>
- ����ŁA <literal>lazy="false"</literal> ��֘A�}�b�s���O�Ɏw�肷�邱�ƂŁA
- �x���������Ȃ��R���N�V������֘A��g�����Ƃ��o���܂��B
- �������Ȃ���A�x���������͂قڂ��ׂẴR���N�V������֘A�Ŏg���邱�Ƃ�
- �Ӑ}���Ă��܂��B������Ȃ��̃I�u�W�F�N�g���f���̒��ɒx���������Ȃ��֘A��
- ������`���Ă��܂��ƁAHibernate�͍ŏI�I�ɂ̓g�����U�N�V��������
- �قڊ��S�ȃf�[�^�x�[�X�������̒��Ƀt�F�b�`���邱�ƂɂȂ�ł��傤�I
+ 一方で、 <literal>lazy="false"</literal> を関連マッピングに指定することで、
+ 遅延処理をしないコレクションや関連を使うことが出来ます。
+ しかしながら、遅延初期化はほぼすべてのコレクションや関連で使われることを
+ 意図しています。もしあなたのオブジェクトモデルの中に遅延処理をしない関連を
+ 多く定義してしまうと、Hibernateは最終的にはトランザクション毎に
+ ほぼ完全なデータベースをメモリの中にフェッチすることになるでしょう!
</para>
<para>
- �����ł́A����̃g�����U�N�V�����ɂ����ăZ���N�g�t�F�b�`�̑����
- �����t�F�b�`�i���R����͒x�������ł͂Ȃ��Ȃ�܂��j��I���������Ƃ�
- ���X����܂��B���ꂩ��t�F�b�`�헪��J�X�^�}�C�Y������@���������܂��B
- Hibernate3�ł́A�t�F�b�`�헪��I����d�g�݂͒P��l�֘A�ƃR���N�V������
- �ς��͂���܂���B
+ 他方では、特定のトランザクションにおいてセレクトフェッチの代わりに
+ 結合フェッチ(当然これは遅延処理ではなくなります)を選択したいことが
+ 時々あります。これからフェッチ戦略をカスタマイズする方法をお見せします。
+ Hibernate3では、フェッチ戦略を選択する仕組みは単一値関連とコレクションで
+ 変わりはありません。
</para>
</sect2>
<sect2 id="performance-fetching-custom" revision="4">
- <title>�t�F�b�`�헪�̃`���[�j���O</title>
+ <title>フェッチ戦略のチューニング</title>
<para>
- �Z���N�g�t�F�b�`�i�f�t�H���g�j��N+1�Z���N�g���Ƃ����傫�Ȏ�_�����邽�߁A
- �}�b�s���O��`�Ō����t�F�b�`��L���ɂ��邱�Ƃ��ł��܂��B
+ セレクトフェッチ(デフォルト)はN+1セレクト問題という大きな弱点があるため、
+ マッピング定義で結合フェッチを有効にすることができます。
</para>
<programlisting><![CDATA[<set name="permissions"
@@ -186,52 +188,52 @@
<programlisting><![CDATA[<many-to-one name="mother" class="Cat" fetch="join"/>]]></programlisting>
<para>
- �}�b�s���O��`�Œ�`���� <literal>�t�F�b�`</literal> �헪�͎��̂�̂ɉe�����܂��B
+ マッピング定義で定義した <literal>フェッチ</literal> 戦略は次のものに影響します。
</para>
<itemizedlist>
<listitem>
<para>
- <literal>get()</literal> �� <literal>load()</literal> �ɂ�镜��
+ <literal>get()</literal> や <literal>load()</literal> による復元
</para>
</listitem>
<listitem>
<para>
- �֘A�Ƀi�r�Q�[�g�����Ƃ��ɔ�������ÖٓI�ȕ���
+ 関連にナビゲートしたときに発生する暗黙的な復元
</para>
</listitem>
<listitem>
<para>
- <literal>Criteria</literal> �N�G��
+ <literal>Criteria</literal> クエリ
</para>
</listitem>
<listitem>
<para>
- <literal>�T�u�Z���N�g</literal> �t�F�b�`��g��HQL�N�G��
+ <literal>サブセレクト</literal> フェッチを使うHQLクエリ
</para>
</listitem>
</itemizedlist>
<para>
- ���Ƃ��ǂ�ȃt�F�b�`�헪��g�����Ƃ��Ă�A�x���ł͂Ȃ��O���t�̓������ɓǂݍ��܂�邱�Ƃ�
- �ۏ���܂��B�܂�A�����HQL�N�G������s���邽�߂ɂ�������SELECT�����������s�����
- ���Ƃ�����̂Œ��ӂ��Ă��������B
+ たとえどんなフェッチ戦略を使ったとしても、遅延ではないグラフはメモリに読み込まれることが
+ 保証されます。つまり、特定のHQLクエリを実行するためにいくつかのSELECT文が即時実行される
+ ことがあるので注意してください。
</para>
<para>
- �ʏ�́A�}�b�s���O��`�Ńt�F�b�`�̃J�X�^�}�C�Y�͍s���܂���B
- ����ɁA�f�t�H���g�̓���̂܂܂ɂ��Ă����āAHQL�� <literal>left join fetch</literal> ��
- �w�肷�邱�Ƃœ���̃g�����U�N�V�����œ����I�[�o�[���C�h���܂��B
- �����Hibernate�ɏ���̃Z���N�g�ŊO��������g���Ċ֘A���Ƀt�F�b�`����悤�Ɏw�肵�Ă��܂��B
- <literal>Criteria</literal> �N�G����API�ł́A
- <literal>setFetchMode(FetchMode.JOIN)</literal> ��g�����Ƃ��o���܂��B
+ 通常は、マッピング定義でフェッチのカスタマイズは行いません。
+ 代わりに、デフォルトの動作のままにしておいて、HQLで <literal>left join fetch</literal> を
+ 指定することで特定のトランザクションで動作をオーバーライドします。
+ これはHibernateに初回のセレクトで外部結合を使って関連を先にフェッチするように指定しています。
+ <literal>Criteria</literal> クエリのAPIでは、
+ <literal>setFetchMode(FetchMode.JOIN)</literal> を使うことが出来ます。
</para>
<para>
- ��� <literal>get()</literal> �� <literal>load()</literal> �Ŏg����
- �t�F�b�`�헪��ς������Ɗ������Ƃ��ɂ́A�P����
- <literal>Criteria</literal> �N�G����g�����������B��F
+ もし <literal>get()</literal> や <literal>load()</literal> で使われる
+ フェッチ戦略を変えたいと感じたときには、単純に
+ <literal>Criteria</literal> クエリを使ってください。例:
</para>
<programlisting><![CDATA[User user = (User) session.createCriteria(User.class)
@@ -240,42 +242,42 @@
.uniqueResult();]]></programlisting>
<para>
- �i����͂�������ORM�\�����[�V������"fetch plan"�ƌĂ�ł����̂Ɠ����ł��B�j
+ (これはいくつかのORMソリューションが"fetch plan"と呼んでいるものと同じです。)
</para>
<para>
- N+1�Z���N�g������邽�߂̂܂������Ⴄ���@�́A��2���x���L���b�V����g�����Ƃł��B
+ N+1セレクト問題を避けるためのまったく違う方法は、第2レベルキャッシュを使うことです。
</para>
</sect2>
<sect2 id="performance-fetching-proxies" revision="2">
- <title>�P��[�֘A�v���L�V</title>
+ <title>単一端関連プロキシ</title>
<para>
- �R���N�V�����̒x���t�F�b�`�́AHibernate���g�̎����ɂ��i���R���N�V������g����
- �������Ă��܂��B�������A�P��[�֘A�ɂ�����x�������ł́A�Ⴄ�d�g�݂�
- �K�v�ł��B�Ώۂ̊֘A�G���e�B�e�B�̓v���L�V�łȂ���Ȃ�܂���BHibernate��
- �i���炵��CGLIB���C�u�����ɂ��j���s���̃o�C�g�R�[�h�g����
- �g���ĉi���I�u�W�F�N�g�̒x���������v���L�V��������Ă��܂��B
+ コレクションの遅延フェッチは、Hibernate自身の実装による永続コレクションを使って
+ 実現しています。しかし、単一端関連における遅延処理では、違う仕組みが
+ 必要です。対象の関連エンティティはプロキシでなければなりません。Hibernateは
+ (すばらしいCGLIBライブラリによる)実行時のバイトコード拡張を
+ 使って永続オブジェクトの遅延初期化プロキシを実現しています。
</para>
<para>
- �f�t�H���g�ł́AHibernate3�́i�J�n���Ɂj���ׂẲi���N���X�̃v���L�V�����A
- ������g���āA <literal>many-to-one</literal> �� <literal>one-to-one</literal> �֘A��
- �x���t�F�b�`��\�ɂ��Ă��܂��B
+ デフォルトでは、Hibernate3は(開始時に)すべての永続クラスのプロキシを生成し、
+ それらを使って、 <literal>many-to-one</literal> や <literal>one-to-one</literal> 関連の
+ 遅延フェッチを可能にしています。
</para>
<para>
- �}�b�s���O�t�@�C���� <literal>proxy</literal> �����ɂ���āA�N���X�̃v���L�V�C���^�[�t�F�C�X�Ƃ���
- �g���C���^�[�t�F�C�X��錾�ł��܂��B�f�t�H���g�ł́AHibernate�͂��̃N���X�̃T�u�N���X��g���܂��B
- <emphasis>�v���L�V�N���X�͏��Ȃ��Ƃ�p�b�P�[�W���Ńf�t�H���g�R���X�g���N�^��������Ȃ����
- �Ȃ�Ȃ����Ƃɒ��ӂ��Ă��������B���ׂẲi���N���X�ɂ��̃R���X�g���N�^�𐄏����܂��I</emphasis>
+ マッピングファイルで <literal>proxy</literal> 属性によって、クラスのプロキシインターフェイスとして
+ 使うインターフェイスを宣言できます。デフォルトでは、Hibernateはそのクラスのサブクラスを使います。
+ <emphasis>プロキシクラスは少なくともパッケージ可視でデフォルトコンストラクタを実装しなければ
+ ならないことに注意してください。すべての永続クラスにこのコンストラクタを推奨します!</emphasis>
</para>
<para>
- �|�����[�t�B�Y���̃N���X�ɑ��Ă��̕��@��K�p����Ƃ��ɂ������l�����邱�Ƃ�����܂��B
- ��F
+ ポリモーフィズムのクラスに対してこの方法を適用するときにいくつか考慮することがあります。
+ 例:
</para>
<programlisting><![CDATA[<class name="Cat" proxy="Cat">
@@ -286,9 +288,9 @@
</class>]]></programlisting>
<para>
- ���ɁA <literal>Cat</literal> �̃C���X�^���X�� <literal>DomesticCat</literal>
- �ɃL���X�g�ł��܂���B���Ƃ���ƂȂ�C���X�^���X�� <literal>DomesticCat</literal>
- �ł������Ƃ��Ă�ł��B
+ 第一に、 <literal>Cat</literal> のインスタンスは <literal>DomesticCat</literal>
+ にキャストできません。たとえ基となるインスタンスが <literal>DomesticCat</literal>
+ であったとしてもです。
</para>
<programlisting><![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a proxy (does not hit the db)
@@ -298,7 +300,7 @@
}]]></programlisting>
<para>
- ���ɁA�v���L�V�� <literal>==</literal> �͐������Ȃ����Ƃ�����܂��B
+ 第二に、プロキシの <literal>==</literal> は成立しないことがあります。
</para>
<programlisting><![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a Cat proxy
@@ -307,28 +309,28 @@
System.out.println(cat==dc); // false]]></programlisting>
<para>
- �������A����͌������قLj����Ƃ����킯�ł͂���܂���B���Ƃ��قȂ����v���L�V�I�u�W�F�N�g�ւ�
- ��̎Q�Ƃ��������Ƃ��Ă�A��ƂȂ�C���X�^���X�͓����I�u�W�F�N�g�ł��B
+ しかし、これは見かけほど悪い状況というわけではありません。たとえ異なったプロキシオブジェクトへの
+ 二つの参照があったとしても、基となるインスタンスは同じオブジェクトです。
</para>
<programlisting><![CDATA[cat.setWeight(11.0); // hit the db to initialize the proxy
System.out.println( dc.getWeight() ); // 11.0]]></programlisting>
<para>
- ��O�ɁA <literal>final</literal> �N���X�� <literal>final</literal> ���\�b�h���N���X��
- CGLIB�v���L�V��g���܂���B
+ 第三に、 <literal>final</literal> クラスや <literal>final</literal> メソッドを持つクラスに
+ CGLIBプロキシを使えません。
</para>
<para>
- �Ō�ɁA����i���I�u�W�F�N�g�̃C���X�^���X����(�Ⴆ�A������������f�t�H���g�R���X�g���N�^�̒���)
- �ɂȂ�炩�̃��\�[�X���K�v�ƂȂ�Ȃ�A���̃��\�[�X��܂��v���L�V��ʂ��Ď擾����܂��B
- ���ۂɂ́A�v���L�V�N���X�͉i���N���X�̃T�u�N���X�ł��B
+ 最後に、もし永続オブジェクトのインスタンス化時(例えば、初期化処理やデフォルトコンストラクタの中で)
+ になんらかのリソースが必要となるなら、そのリソースもまたプロキシを通して取得されます。
+ 実際には、プロキシクラスは永続クラスのサブクラスです。
</para>
<para>
- �����̖���Java�̒P��p�����f���̌�����̐����̂��߂ł��B��������̖���������̂Ȃ�A
- �r�W�l�X���\�b�h��錾�����C���^�[�t�F�C�X���ꂼ��i���N���X�Ŏ������Ȃ���Ȃ�܂���B
- �}�b�s���O�t�@�C���ł����̃C���^�[�t�F�C�X��w�肷��K�v������܂��B��F
+ これらの問題はJavaの単一継承モデルの原理上の制限のためです。もしこれらの問題を避けたいのなら、
+ ビジネスメソッドを宣言したインターフェイスをそれぞれ永続クラスで実装しなければなりません。
+ マッピングファイルでこれらのインターフェイスを指定する必要があります。例:
</para>
<programlisting><![CDATA[<class name="CatImpl" proxy="Cat">
@@ -339,11 +341,11 @@
</class>]]></programlisting>
<para>
- <literal>CatImpl</literal> �� <literal>Cat</literal> �C���^�[�t�F�C�X���������̂ɑ��A
- <literal>DomesticCatImpl</literal> �� <literal>DomesticCat</literal> ��������܂��B
- ����ƁA <literal>load()</literal> �� <literal>iterate()</literal> �́A
- <literal>Cat</literal> �� <literal>DomesticCat</literal> �̃C���X�^���X�̃v���L�V��
- �Ԃ��܂��B�i <literal>list()</literal> �͒ʏ�̓v���L�V��Ԃ��Ȃ����Ƃɒ��ӂ��Ă��������B�j
+ <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> は通常はプロキシを返さないことに注意してください。)
</para>
<programlisting><![CDATA[Cat cat = (Cat) session.load(CatImpl.class, catid);
@@ -351,136 +353,136 @@
Cat fritz = (Cat) iter.next();]]></programlisting>
<para>
- �֘A��x������������܂��B����̓v���p�e�B�� <literal>Cat</literal> �^�Ő錾���Ȃ����
- �Ȃ�Ȃ����Ƃ�Ӗ����܂��B <literal>CatImpl</literal> �ł͂���܂���B
+ 関連も遅延初期化されます。これはプロパティを <literal>Cat</literal> 型で宣言しなければ
+ ならないことを意味します。 <literal>CatImpl</literal> ではありません。
</para>
<para>
- �v���L�V�̏������� <emphasis>�K�v�Ƃ��Ȃ�</emphasis> �������݂��܂��B
+ プロキシの初期化を <emphasis>必要としない</emphasis> 操作も存在します。
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- <literal>equals()</literal> �i�i���N���X�� <literal>equals()</literal> ��
- �I�[�o�[���C�h���Ȃ��Ƃ��j
+ <literal>equals()</literal> (永続クラスが <literal>equals()</literal> を
+ オーバーライドしないとき)
</para>
</listitem>
<listitem>
<para>
- <literal>hashCode()</literal> �i�i���N���X�� <literal>hashCode()</literal> ��
- �I�[�o�[���C�h���Ȃ��Ƃ��j
+ <literal>hashCode()</literal> (永続クラスが <literal>hashCode()</literal> を
+ オーバーライドしないとき)
</para>
</listitem>
<listitem>
<para>
- ���ʎq��getter���\�b�h
+ 識別子のgetterメソッド
</para>
</listitem>
</itemizedlist>
<para>
- Hibernate�� <literal>equals()</literal> �� <literal>hashCode()</literal> ��I�[�o�[���C�h����
- �i���N���X���o���܂��B
+ Hibernateは <literal>equals()</literal> や <literal>hashCode()</literal> をオーバーライドした
+ 永続クラスを検出します。
</para>
<para>
- �f�t�H���g�� <literal>lazy="proxy"</literal> �̑���ɁA <literal>lazy="no-proxy"</literal> ��
- �I���ƂŁA�^�ϊ��Ɋ֘A����������邱�Ƃ��o���܂��B
- �������A�r���h���̃o�C�g�R�[�h�g�ݍ��݂��K�v�ɂȂ�A�ǂ̂悤�ȑ���ł����Ă�A
- �������Ƀv���L�V�̏�������s�����ƂɂȂ�ł��傤�B
+ デフォルトの <literal>lazy="proxy"</literal> の代わりに、 <literal>lazy="no-proxy"</literal> を
+ 選んだことで、型変換に関連する問題を回避することが出来ます。
+ しかし、ビルド時のバイトコード組み込みが必要になり、どのような操作であっても、
+ ただちにプロキシの初期化を行うことになるでしょう。
</para>
</sect2>
<sect2 id="performance-fetching-initialization" revision="1">
- <title>�R���N�V�����ƃv���L�V�̏�����</title>
+ <title>コレクションとプロキシの初期化</title>
<para>
- <literal>LazyInitializationException</literal> �́A <literal>Session</literal> �̃X�R�[�v�O����
- ���������Ă��Ȃ��R���N�V������v���L�V�ɃA�N�Z�X���ꂽ�Ƃ��ɁAHibernate�ɂ���ăX���[����܂��B
- ���Ȃ킿�A�R���N�V������v���L�V�ւ̎Q�Ƃ��G���e�B�e�B���������ꂽ��Ԃ̎��ł��B
+ <literal>LazyInitializationException</literal> は、 <literal>Session</literal> のスコープ外から
+ 初期化していないコレクションやプロキシにアクセスされたときに、Hibernateによってスローされます。
+ すなわち、コレクションやプロキシへの参照を持つエンティティが分離された状態の時です。
</para>
<para>
- <literal>Session</literal> ��N���[�Y����O�Ƀv���L�V��R���N�V�����̏�������m����
- �s�������Ƃ�������܂��B������A <literal>cat.getSex()</literal>
- �� <literal>cat.getKittens().size()</literal> �Ȃǂ��ɌĂяo�����Ƃŏ������������邱�Ƃ͂ł��܂��B
- ����������̓R�[�h��ǂސl���������A�ėp�I�ȃR�[�h�Ƃ����_�����s�ւł��B
+ <literal>Session</literal> をクローズする前にプロキシやコレクションの初期化を確実に
+ 行いたいときがあります。もちろん、 <literal>cat.getSex()</literal>
+ や <literal>cat.getKittens().size()</literal> などを常に呼び出すことで初期化を強制することはできます。
+ しかしこれはコードを読む人を混乱させ、汎用的なコードという点からも不便です。
</para>
<para>
- static���\�b�h�� <literal>Hibernate.initialize()</literal> �� <literal>Hibernate.isInitialized()</literal>
- �͒x���������̃R���N�V������v���L�V�����Ƃ��ɕ֗��ȕ��@��A�v���P�[�V�����ɒ��܂��B
- <literal>Hibernate.initialize(cat)</literal> �́A <literal>Session</literal> ���I�[�v�����Ă�������
- <literal>cat</literal> �v���L�V�����I�ɏ��������܂��B
- <literal>Hibernate.initialize( cat.getKittens() )</literal> ��kittens�R���N�V�����ɑ��ē��l��
- ���ʂ�����܂��B
+ 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コレクションに対して同様の
+ 効果があります。
</para>
<para>
- �ʂ̑I���Ƃ��āA�K�v�Ȃ��ׂẴR���N�V������v���L�V�����[�h�����܂�
- <literal>Session</literal> ��I�[�v���ɂ��Ă������@������܂��B�������̃A�v���P�[�V������
- �A�[�L�e�N�`���ł́A����Hibernate�ɂ��f�[�^�A�N�Z�X��s���R�[�h�ƁA�����g��
- �R�[�h���قȂ�A�v���P�[�V�����̃��C���[��A�����I�ɈقȂ�v���Z�b�T�̂Ƃ��ɂ́A
- �R���N�V�����������������Ƃ��� <literal>Session</literal> ���I�[�v�����Ă��邱�Ƃ�
- �ۏ����肪����܂��B���̖��ɑ��Ă�2�̊�{�I�ȕ��@������܂��B
+ 別の選択肢として、必要なすべてのコレクションやプロキシがロードされるまで
+ <literal>Session</literal> をオープンにしておく方法があります。いくつかのアプリケーションの
+ アーキテクチャでは、特にHibernateによるデータアクセスを行うコードと、それを使う
+ コードが異なるアプリケーションのレイヤーや、物理的に異なるプロセッサのときには、
+ コレクションが初期化されるときに <literal>Session</literal> がオープンしていることを
+ 保証する問題があります。この問題に対しては2つの基本的な方法があります。
</para>
<itemizedlist>
<listitem>
<para>
- Web�x�[�X�̃A�v���P�[�V�����ł́A
- �r���[�̃����_�����O���������A���N�G�X�g���I����ԍŌ�� <literal>Session</literal>
- ��N���[�Y���邽�߂ɁA�T�[�u���b�g�t�B���^��g�����Ƃ��ł��܂��i <emphasis>Open Session in View</emphasis>
- �p�^�[���ł��j�B������A�A�v���P�[�V������Ղ̗�O�����̐��m�������ɏd�v�ɂȂ�܂��B
- �r���[�̃����_�����O���ɗ�O�����������Ƃ��ł����A���[�U�ɏ������߂�O��
- <literal>Session</literal> �̃N���[�Y�ƃg�����U�N�V�����̏I����s��
- ���Ƃ��s���ɂȂ�܂��B
- Hibernate��Wiki�ɍڂ��Ă���"Open Session in View"�p�^�[���̗��Q�Ƃ��Ă��������B
+ Webベースのアプリケーションでは、
+ ビューのレンダリングが完了し、リクエストが終わる一番最後で <literal>Session</literal>
+ をクローズするために、サーブレットフィルタを使うことができます( <emphasis>Open Session in View</emphasis>
+ パターンです)。もちろん、アプリケーション基盤の例外処理の正確性が非常に重要になります。
+ ビューのレンダリング中に例外が発生したときでさえ、ユーザに処理が戻る前に
+ <literal>Session</literal> のクローズとトランザクションの終了を行う
+ ことが不可欠になります。
+ HibernateのWikiに載っている"Open Session in View"パターンの例を参照してください。
</para>
</listitem>
<listitem>
<para>
- �r�W�l�X�w���������Ă���A�v���P�[�V�����ł́A�r�W�l�X���W�b�N��
- Web�w�ŕK�v�ɂȂ邷�ׂẴR���N�V�������O��"����"����K�v������܂��B
- ����͓���̃��[�X�P�[�X�ŕK�v�ƂȂ�v���[���e�[�V����/Web�w�ɑ��A
- �r�W�l�X�w�����ׂẴf�[�^���[�h���A���ׂẴf�[�^���������ĕԂ��ׂ���
- �������Ƃ�Ӗ����Ă��܂��B�ʏ�́A�A�v���P�[�V������Web�w�ŕK�v�ȃR���N�V����
- ���ꂼ��ɑ��� <literal>Hibernate.initialize()</literal> ��Ăяo����
- �i���̌Ăяo���̓Z�b�V������N���[�Y����O�ɍs���K�v������܂��j�A
- Hibernate�N�G���� <literal>FETCH</literal> �߂� <literal>Criteria</literal>
- �� <literal>FetchMode.JOIN</literal> ��g���ăR���N�V�������ɕ������܂��B
- ���ʂ� <emphasis>Session Facade</emphasis> �p�^�[���̑����
- <emphasis>Command</emphasis> �p�^�[����̗p����ق������ȒP�ł��B
+ ビジネス層が分離しているアプリケーションでは、ビジネスロジックは
+ 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> パターンを採用するほうがより簡単です。
</para>
</listitem>
<listitem>
<para>
- ����������Ă��Ȃ��R���N�V�����i������͑��̃v���L�V�j�ɃA�N�Z�X����O�ɁA
- <literal>merge()</literal> �� <literal>lock()</literal> ��g���ĐV����
- <literal>Session</literal> �ɈȑO�Ƀ��[�h���ꂽ�I�u�W�F�N�g��lj����邱�Ƃ�o���܂��B
- �A�h�z�b�N�ȃg�����U�N�V�����̃Z�}���e�B�N�X�������̂ŁAHibernate��
- ��������I�ɍs�킸�A <emphasis>�s���ׂ��ł����܂���</emphasis> �I
+ 初期化されていないコレクション(もしくは他のプロキシ)にアクセスする前に、
+ <literal>merge()</literal> や <literal>lock()</literal> を使って新しい
+ <literal>Session</literal> に以前にロードされたオブジェクトを追加することも出来ます。
+ アドホックなトランザクションのセマンティクスを導入したので、Hibernateは
+ これを自動的に行わず、 <emphasis>行うべきでもありません</emphasis> !
</para>
</listitem>
</itemizedlist>
<para>
- �傫�ȃR���N�V�����������������͂Ȃ����A�R���N�V�����ɂ��Ă̂Ȃ�炩�̏��i�T�C�Y�̂悤�ȁj
- ��f�[�^�̃T�u�Z�b�g��K�v�Ƃ��邱�Ƃ�����܂��B
+ 大きなコレクションを初期化したくはないが、コレクションについてのなんらかの情報(サイズのような)
+ やデータのサブセットを必要とすることがあります。
</para>
<para>
- �R���N�V�����t�B���^��g�����ƂŁA�����������ɃR���N�V�����̃T�C�Y��擾���邱�Ƃ��o���܂��B
+ コレクションフィルタを使うことで、初期化せずにコレクションのサイズを取得することが出来ます。
</para>
<programlisting><![CDATA[( (Integer) s.createFilter( collection, "select count(*)" ).list().get(0) ).intValue()]]></programlisting>
<para>
- <literal>createFilter()</literal> ���\�b�h�́A�R���N�V�����S�̂���������K�v�Ȃ��ɁA�R���N�V������
- �T�u�Z�b�g�����邽�߂Ɍ��ʓI�Ɏg���܂��B
+ <literal>createFilter()</literal> メソッドは、コレクション全体を初期化する必要なしに、コレクションの
+ サブセットを復元するために効果的に使えます。
</para>
<programlisting><![CDATA[s.createFilter( lazyCollection, "").setFirstResult(0).setMaxResults(10).list();]]></programlisting>
@@ -488,39 +490,39 @@
</sect2>
<sect2 id="performance-fetching-batch">
- <title>�o�b�`�t�F�b�`�̎g�p</title>
+ <title>バッチフェッチの使用</title>
<para>
- Hibernate�̓o�b�`�t�F�b�`������I�Ɏg�p�ł��܂��B��̃v���L�V�i������̓R���N�V�����j���A�N�Z�X
- �����ƁAHibernate�͂������̏��������Ă��Ȃ��v���L�V���[�h���邱�Ƃ��ł��܂��B�o�b�`�t�F�b�`��
- �x���Z���N�g�t�F�b�`�헪�ɑ���œK���ł��B�o�b�`�t�F�b�`�̒����ɂ͂Q�̕��@������܂��B
- �N���X���x���ƃR���N�V�������x���ł��B
+ Hibernateはバッチフェッチを効率的に使用できます。一つのプロキシ(もしくはコレクション)がアクセス
+ されると、Hibernateはいくつかの初期化していないプロキシをロードすることができます。バッチフェッチは
+ 遅延セレクトフェッチ戦略に対する最適化です。バッチフェッチの調整には2つの方法があります。
+ クラスレベルとコレクションレベルです。
</para>
<para>
- �N���X�A�v�f�̃o�b�`�t�F�b�`�͗����ȒP�ł��B���s���̎��̏�ʂ�z�����Ă��������B
- <literal>Session</literal> �Ƀ��[�h���ꂽ25�� <literal>Cat</literal> �C���X�^���X�����݂��A
- ���ꂼ��� <literal>Cat</literal> �� <literal>owner</literal> �ł��� <literal>Person</literal> �ւ̊֘A�����܂��B
- <literal>Person</literal> �N���X�� <literal>lazy="true"</literal> �̃v���L�V�Ń}�b�s���O����Ă��܂��B
- ��������ׂĂ�Cat�ɑ��ČJ��Ԃ� <literal>getOwner()</literal> ��Ăяo���ƁAHibernate��
- �f�t�H���g�ł�25��� <literal>SELECT</literal> ����s���Aowner�v���L�V�̕������܂��B
- ���̐U�镑���� <literal>Person</literal> �̃}�b�s���O�� <literal>batch-size</literal>
- �̎w��Œ����ł��܂��B
+ クラス、要素のバッチフェッチは理解が簡単です。実行時の次の場面を想像してください。
+ <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>
+ の指定で調整できます。
</para>
<programlisting><![CDATA[<class name="Person" batch-size="10">...</class>]]></programlisting>
<para>
- Hibernate�̓N�G����R������s����悤�ɂȂ�܂��B�p�^�[����10, 10, 5�ł��B
+ Hibernateはクエリを3回だけを実行するようになります。パターンは10, 10, 5です。
</para>
<para>
- �R���N�V�����̃o�b�`�t�F�b�`��L���ɂ��邱�Ƃ��o���܂��B��Ƃ��āA���ꂼ���
- <literal>Person</literal> �� <literal>Cat</literal> �̒x���R���N�V���������Ă���A
- 10��Person�� <literal>Sesssion</literal> �Ƀ��[�h���ꂽ�Ƃ���ƁA���ׂĂ�Person��
- ���ČJ��Ԃ� <literal>getCats()</literal> ��Ăяo�����ƂŁA�v10��� <literal>SELECT</literal>
- ���������܂��B��� <literal>Person</literal> �̃}�b�s���O�� <literal>cats</literal>
- �R���N�V�����̃o�b�`�t�F�b�`��L���ɂ���AHibernate�̓R���N�V�����̎��O�t�F�b�`���o���܂��B
+ コレクションのバッチフェッチも有効にすることが出来ます。例として、それぞれの
+ <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はコレクションの事前フェッチが出来ます。
</para>
<programlisting><![CDATA[<class name="Person">
@@ -530,47 +532,47 @@
</class>]]></programlisting>
<para>
- <literal>batch-size</literal> ��3�Ȃ̂ŁAHibernate��4��� <literal>SELECT</literal>
- ��3�A3�A3�A1���[�h���܂��B�J��Ԃ��ƁA�����̒l�͓���� <literal>Session</literal>
- �̒��̏���������Ă��Ȃ��R���N�V�����̊��Ґ��Ɉˑ����܂��B
+ <literal>batch-size</literal> が3なので、Hibernateは4回の <literal>SELECT</literal>
+ で3個、3個、3個、1個をロードします。繰り返すと、属性の値は特定の <literal>Session</literal>
+ の中の初期化されていないコレクションの期待数に依存します。
</para>
<para>
- �R���N�V�����̃o�b�`�t�F�b�`�̓A�C�e���̃l�X�g�����c���[�A ���Ȃ킿�A��\�I�ȕ��i�\�̃p�^�[����
- ����ꍇ�ɓ��ɗL�p�ł��B�i�������A�ǂݍ��݂������c���[�ł� <emphasis>�l�X�g����set</emphasis>
- �� <emphasis>��̉������p�X</emphasis> �����悢�I��ɂȂ�܂��B�j
+ コレクションのバッチフェッチはアイテムのネストしたツリー、 すなわち、代表的な部品表のパターンが
+ ある場合に特に有用です。(しかし、読み込みが多いツリーでは <emphasis>ネストしたset</emphasis>
+ や <emphasis>具体化したパス</emphasis> がよりよい選択になります。)
</para>
</sect2>
<sect2 id="performance-fetching-subselect">
- <title>�T�u�Z���N�g�t�F�b�`�̎g�p</title>
+ <title>サブセレクトフェッチの使用</title>
<para>
- ��̒x���R���N�V������P��l�v���L�V���t�F�b�`����Ȃ�������Ȃ��Ƃ��AHibernate��
- ����炷�ׂĂ��[�h���A�T�u�Z���N�g�̃I���W�i���N�G�����ēx���s����܂��B�����
- �o�b�`�t�F�b�`�Ɠ������@�œ����A�������̃��[�h�͍s���܂���B
+ 一つの遅延コレクションや単一値プロキシがフェッチされなければいけないとき、Hibernateは
+ それらすべてをロードし、サブセレクトのオリジナルクエリが再度実行されます。これは
+ バッチフェッチと同じ方法で動き、少しずつのロードは行いません。
</para>
<!-- TODO: Write more about this -->
- <!-- ���������� -->
+ <!-- 早く書けよ -->
</sect2>
<sect2 id="performance-fetching-lazyproperties">
- <title>�x���v���p�e�B�t�F�b�`�̎g�p</title>
+ <title>遅延プロパティフェッチの使用</title>
<para>
- Hibernate3�̓v���p�e�B���Ƃ̒x���t�F�b�`��T�|�[�g���Ă��܂��B���̍œK����@��
- <emphasis>�O���[�v�̃t�F�b�`</emphasis> �Ƃ��Ă�m���Ă��܂��B����͂قƂ��
- �v�]����o���@�\�ł��邱�Ƃɒ��ӂ��Ă��������B���ۂɂ͗�ǂݍ��݂̍œK������A
- �s�ǂݍ��݂̍œK�������ɏd�v�ł��B
- �������A�N���X�̂������̃v���p�e�B������ǂݍ��ނ��Ƃ́A�����̃e�[�u�������S��̗�����A
- �f�[�^���f������P�ł��Ȃ��Ȃǂ̋ɒ[�ȏꍇ�ɂ͗L�p�ł��B
+ Hibernate3はプロパティごとの遅延フェッチをサポートしています。この最適化手法は
+ <emphasis>グループのフェッチ</emphasis> としても知られています。これはほとんど
+ 要望から出た機能であることに注意してください。実際には列読み込みの最適化よりも、
+ 行読み込みの最適化が非常に重要です。
+ しかし、クラスのいくつかのプロパティだけを読み込むことは、既存のテーブルが何百もの列を持ち、
+ データモデルを改善できないなどの極端な場合には有用です。
</para>
<para>
- �x���v���p�e�B�ǂݍ��݂�L���ɂ���ɂ́A�Ώۂ̃v���p�e�B�̃}�b�s���O�� <literal>lazy</literal>
- ������Z�b�g�����������B
+ 遅延プロパティ読み込みを有効にするには、対象のプロパティのマッピングで <literal>lazy</literal>
+ 属性をセットしてください。
</para>
<programlisting><![CDATA[<class name="Document">
@@ -583,13 +585,13 @@
</class>]]></programlisting>
<para>
- �x���v���p�e�B�ǂݍ��݂̓r���h���̃o�C�g�R�[�h�g�ݍ��݂�K�v�Ƃ��܂��I���
- �i���N���X�ɑg�ݍ��݂�����Ă��Ȃ��Ȃ�AHibernate�͖ق��Ēx���v���p�e�B�̐ݒ�����āA
- �����t�F�b�`�ɖ߂��܂��B
+ 遅延プロパティ読み込みはビルド時のバイトコード組み込みを必要とします!もし
+ 永続クラスに組み込みがされていないなら、Hibernateは黙って遅延プロパティの設定を無視して、
+ 即時フェッチに戻します。
</para>
<para>
- �o�C�g�R�[�h�g�ݍ��݂͈ȉ���Ant�^�X�N��g���Ă��������B
+ バイトコード組み込みは以下のAntタスクを使ってください。
</para>
<programlisting><![CDATA[<target name="instrument" depends="compile">
@@ -607,15 +609,15 @@
</target>]]></programlisting>
<para>
- �s�v�ȗ��ǂݍ��܂Ȃ����߂́A�ʂ́i���悢�H�j���@�́A���Ȃ��Ƃ�
- �ǂݍ��݂݂̂̃g�����U�N�V�����ɂ����ẮAHQL��Criteria�N�G���̎ˉe
- �@�\��g�����Ƃł��B���̕��@�̓r���h���̃o�C�g�R�[�h�g�ݍ��݂��s�v�ɂȂ�A
- ���ǂ������@�ł��B
+ 不要な列を読み込まないための、別の(よりよい?)方法は、少なくとも
+ 読み込みのみのトランザクションにおいては、HQLやCriteriaクエリの射影
+ 機能を使うことです。この方法はビルド時のバイトコード組み込みが不要になり、
+ より良い解決方法です。
</para>
<para>
- HQL�� <literal>fetch all properties</literal> ��g�����ƂŁA���ʂǂ����
- �v���p�e�B�̑����t�F�b�`���O�������邱�Ƃ��o���܂��B
+ HQLで <literal>fetch all properties</literal> を使うことで、普通どおりの
+ プロパティの即時フェッチングを強制することが出来ます。
</para>
</sect2>
@@ -623,28 +625,28 @@
</sect1>
<sect1 id="performance-cache" revision="1">
- <title>��2���x���L���b�V��</title>
+ <title>第2レベルキャッシュ</title>
<para>
- Hibernate�� <literal>Session</literal> �͉i���f�[�^�̃g�����U�N�V�������x���̃L���b�V���ł��B
- class-by-class��collection-by-collection���Ƃ́A�N���X�^���x����JVM���x��
- �i <literal>SessionFactory</literal> ���x���j�̃L���b�V����ݒ肷�邱�Ƃ��o���܂��B
- �N���X�^�����ꂽ�L���b�V���ɂȂ����Ƃ����o���܂��B���������ӂ��Ă��������B
- �L���b�V���͑��̃A�v���P�[�V�����ɂ��i���w�̕ύX��
- �l�����܂���i�L���b�V���f�[�^�����I�Ɋ�����ɂ���ݒ�͏o���܂��j�B
+ Hibernateの <literal>Session</literal> は永続データのトランザクションレベルのキャッシュです。
+ class-by-classとcollection-by-collectionごとの、クラスタレベルやJVMレベル
+ ( <literal>SessionFactory</literal> レベル)のキャッシュを設定することが出来ます。
+ クラスタ化されたキャッシュにつなぐことさえ出来ます。しかし注意してください。
+ キャッシュは他のアプリケーションによる永続層の変更を
+ 考慮しません(キャッシュデータを定期的に期限切れにする設定は出来ます)。
</para>
<para revision="1">
- Hibernate���g�p����L���b�V�������́A<literal>hibernate.cache.provider_class</literal> �v���p�e�B��
- <literal>org.hibernate.cache.CacheProvider</literal> ����������N���X����w�肷�邱�ƂŕύX�ł��܂��B
- Hibernate�͑����̃I�[�v���\�[�X�̃L���b�V���v���o�C�_��r���g�C�������Ŏ����Ă��܂��i��Ƀ��X�g������܂��j�B
- �����āA�O�ɐ�������悤�ɁA���Ȃ����g���Ǝ��̎������āA�����g�ݍ��ނ��Ƃ�o���܂��B
- �o�[�W����3.2���O�ł�EhCache���f�t�H���g�̃L���b�V���v���o�C�_�ł��邱�Ƃɒ��ӂ��Ă��������B
- �o�[�W����3.2�ł͂���͓��Ă͂܂�܂���B
+ Hibernateが使用するキャッシュ実装は、<literal>hibernate.cache.provider_class</literal> プロパティに
+ <literal>org.hibernate.cache.CacheProvider</literal> を実装したクラス名を指定することで変更できます。
+ Hibernateは多くのオープンソースのキャッシュプロバイダをビルトイン実装で持っています(後にリストがあります)。
+ 加えて、前に説明したように、あなた自身が独自の実装をして、それを組み込むことも出来ます。
+ バージョン3.2より前ではEhCacheがデフォルトのキャッシュプロバイダであることに注意してください。
+ バージョン3.2ではこれは当てはまりません。
</para>
<table frame="topbot" id="cacheproviders" revision="1">
- <title>�L���b�V���v���o�C�_</title>
+ <title>キャッシュプロバイダ</title>
<tgroup cols='5' align='left' colsep='1' rowsep='1'>
<colspec colname='c1' colwidth="1*"/>
<colspec colname='c2' colwidth="3*"/>
@@ -653,58 +655,58 @@
<colspec colname='c5' colwidth="1*"/>
<thead>
<row>
- <entry>�L���b�V��</entry>
- <entry>�v���o�C�_�N���X</entry>
- <entry>�^�C�v</entry>
- <entry>�N���X�^�Z�[�t</entry>
- <entry>�N�G���L���b�V���̃T�|�[�g</entry>
+ <entry>キャッシュ</entry>
+ <entry>プロバイダクラス</entry>
+ <entry>タイプ</entry>
+ <entry>クラスタセーフ</entry>
+ <entry>クエリキャッシュのサポート</entry>
</row>
</thead>
<tbody>
<row>
- <entry>Hashtable�i���i�p�Ƃ��ĈӐ}���Ă��܂���j</entry>
+ <entry>Hashtable(製品用として意図していません)</entry>
<entry><literal>org.hibernate.cache.HashtableCacheProvider</literal></entry>
- <entry>������</entry>
+ <entry>メモリ</entry>
<entry></entry>
<entry>yes</entry>
</row>
<row>
<entry>EHCache</entry>
<entry><literal>org.hibernate.cache.EhCacheProvider</literal></entry>
- <entry>�������A�f�B�X�N</entry>
+ <entry>メモリ、ディスク</entry>
<entry></entry>
<entry>yes</entry>
</row>
<row>
<entry>OSCache</entry>
<entry><literal>org.hibernate.cache.OSCacheProvider</literal></entry>
- <entry>�������A�f�B�X�N</entry>
- <entry>yes�i�N���X�^�������j</entry>
+ <entry>メモリ、ディスク</entry>
+ <entry>yes(クラスタ無効化)</entry>
<entry>yes</entry>
</row>
<row>
<entry>SwarmCache</entry>
<entry><literal>org.hibernate.cache.SwarmCacheProvider</literal></entry>
- <entry>�N���X�^�iip�}���`�L���X�g�j</entry>
- <entry>yes�i�N���X�^�������j</entry>
+ <entry>クラスタ(ipマルチキャスト)</entry>
+ <entry>yes(クラスタ無効化)</entry>
<entry></entry>
</row>
<row>
<entry>JBoss TreeCache</entry>
<entry><literal>org.hibernate.cache.TreeCacheProvider</literal></entry>
- <entry>�N���X�^�iip�}���`�L���X�g�j�A�g�����U�N�V���i��</entry>
- <entry>yes�i�����j</entry>
- <entry>yes�i�����������K�v�j</entry>
+ <entry>クラスタ(ipマルチキャスト)、トランザクショナル</entry>
+ <entry>yes(複製)</entry>
+ <entry>yes(時刻同期が必要)</entry>
</row>
</tbody>
</tgroup>
</table>
<sect2 id="performance-cache-mapping" revision="2">
- <title>�L���b�V���̃}�b�s���O</title>
+ <title>キャッシュのマッピング</title>
<para>
- �N���X��R���N�V�����̃}�b�s���O�� <literal><cache></literal> �v�f�͈ȉ��̌`���ł��B
+ クラスやコレクションのマッピングの <literal><cache></literal> 要素は以下の形式です。
</para>
<programlistingco>
@@ -747,23 +749,23 @@
</programlistingco>
<para>
- �܂��́i���悢���@�Ƃ��āH�j�A <literal>hibernate.cfg.xml</literal> �� <literal><class-cache></literal>
- �� <literal><collection-cache></literal> �v�f��w�肷�邱�Ƃ�o���܂��B
+ または(よりよい方法として?)、 <literal>hibernate.cfg.xml</literal> に <literal><class-cache></literal>
+ と <literal><collection-cache></literal> 要素を指定することも出来ます。
</para>
<para>
- <literal>usage</literal> ������ <emphasis>�L���b�V���̕��헪</emphasis> ��w�肵�܂��B
+ <literal>usage</literal> 属性は <emphasis>キャッシュの並列性戦略</emphasis> を指定します。
</para>
</sect2>
<sect2 id="performance-cache-readonly">
- <title>read only�헪</title>
+ <title>read only戦略</title>
<para>
- ����A�v���P�[�V�������ǂݍ��݂̂ݕK�v�ŁA�i���N���X�̃C���X�^���X��ύX���Ȃ��Ȃ�A
- <literal>read-only</literal> �L���b�V����g�����Ƃ��o���܂��B����͂���Ƃ�P����
- ����Ƃ�p�t�H�[�}���X�̗ǂ��헪�ł��B�N���X�^�ł̎g�p����S�Ɉ��S�ł��B
+ もしアプリケーションが読み込みのみ必要で、永続クラスのインスタンスを変更しないなら、
+ <literal>read-only</literal> キャッシュを使うことが出来ます。これはもっとも単純で
+ もっともパフォーマンスの良い戦略です。クラスタでの使用も完全に安全です。
</para>
<programlisting><![CDATA[<class name="eg.Immutable" mutable="false">
@@ -775,19 +777,19 @@
<sect2 id="performance-cache-readwrite">
- <title>read/write�헪</title>
+ <title>read/write戦略</title>
<para>
- �A�v���P�[�V�������f�[�^��X�V����K�v������Ȃ�A <literal>read-write</literal> �L���b�V�����K������
- ����܂���B���̃L���b�V���헪�́A�V���A���C�U�u���ȃg�����U�N�V�����������x�����v�������Ȃ�A
- �����Ďg���ׂ��ł͂���܂���B����L���b�V����JTA���Ŏg����Ȃ�AJTA <literal>TransactionManager</literal>
- ��擾���邽�߂̕��@���� <literal>hibernate.transaction.manager_lookup_class</literal>
- �v���p�e�B��w�肵�Ȃ���Ȃ�܂���B���̊��ł́A <literal>Session.close()</literal>
- �� <literal>Session.disconnect()</literal> ���Ăꂽ�Ƃ��ɁA�m���Ƀg�����U�N�V����������
- ���Ă��Ȃ���Ȃ�܂���B
- ����N���X�^�ł��̐헪��g�������Ȃ�A��ƂȂ�L���b�V���̎��������b�N��T�|�[�g
- ���Ă��邱�Ƃ�ۏ��Ȃ���Ȃ�܂���B
- �g�ݍ��݂̃L���b�V���v���o�C�_�� <emphasis>�T�|�[�g���Ă��܂���</emphasis> �B
+ アプリケーションがデータを更新する必要があるなら、 <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> 。
</para>
<programlisting><![CDATA[<class name="eg.Cat" .... >
@@ -802,39 +804,39 @@
</sect2>
<sect2 id="performance-cache-nonstrict">
- <title>�����ł͂Ȃ�read/write�헪</title>
+ <title>厳密ではないread/write戦略</title>
<para>
- �A�v���P�[�V���������܂ɂ����f�[�^��X�V����K�v�͂Ȃ��i���Ȃ킿��̃g�����U�N�V������
- �����ɓ����A�C�e����X�V���悤�Ƃ��邱�Ƃ͂قƂ�NjN����Ȃ��j�A�����ȃg�����U�N�V����������
- �v������Ȃ��Ȃ�A <literal>nonstrict-read-write</literal> �L���b�V�����K���������܂���B
- ����L���b�V����JTA���Ŏg����Ȃ�A <literal>hibernate.transaction.manager_lookup_class</literal>
- ��w�肵�Ȃ���Ȃ�܂���B���̊��ł́A <literal>Session.close()</literal>
- �� <literal>Session.disconnect()</literal> ���Ăꂽ�Ƃ��ɁA�m���Ƀg�����U�N�V����������
- ���Ă��Ȃ���Ȃ�܂���B
+ アプリケーションがたまにしかデータを更新する必要はなく(すなわち二つのトランザクションが
+ 同時に同じアイテムを更新しようとすることはほとんど起こらない)、厳密なトランザクション分離が
+ 要求されないなら、 <literal>nonstrict-read-write</literal> キャッシュが適当かもしれません。
+ もしキャッシュがJTA環境で使われるなら、 <literal>hibernate.transaction.manager_lookup_class</literal>
+ を指定しなければなりません。他の環境では、 <literal>Session.close()</literal>
+ や <literal>Session.disconnect()</literal> が呼ばれたときに、確実にトランザクションが完了
+ していなければなりません。
</para>
</sect2>
<sect2 id="performance-cache-transactional">
- <title>transactional�헪</title>
+ <title>transactional戦略</title>
<para>
- <literal>transactional</literal> �L���b�V���헪��JBoss TreeCache�̂悤�Ȋ��S�ȃg�����U�N�V���i��
- �L���b�V���v���o�C�_�̃T�|�[�g����܂��B
- ���̂悤�ȃL���b�V����JTA���ł̂ݎg�p�\�ŁA <literal>hibernate.transaction.manager_lookup_class</literal>
- ��w�肵�Ȃ���Ȃ�܂���B
+ <literal>transactional</literal> キャッシュ戦略はJBoss TreeCacheのような完全なトランザクショナル
+ キャッシュプロバイダのサポートを提供します。
+ このようなキャッシュはJTA環境でのみ使用可能で、 <literal>hibernate.transaction.manager_lookup_class</literal>
+ を指定しなければなりません。
</para>
</sect2>
<para>
- ���ׂĂ̓������s���L���b�V���헪��T�|�[�g���Ă���L���b�V���v���o�C�_�͂���܂���B
- �ȉ��̕\�͂ǂ̃v���o�C�_���ǂ̓������헪�ɑΉ����邩��\���Ă��܂��B
+ すべての同時並行性キャッシュ戦略をサポートしているキャッシュプロバイダはありません。
+ 以下の表はどのプロバイダがどの同時並列性戦略に対応するかを表しています。
</para>
<table frame="topbot">
- <title>�������s���L���b�V���헪�̃T�|�[�g</title>
+ <title>同時並行性キャッシュ戦略のサポート</title>
<tgroup cols='5' align='left' colsep='1' rowsep='1'>
<colspec colname='c1' colwidth="1*"/>
<colspec colname='c2' colwidth="1*"/>
@@ -843,16 +845,16 @@
<colspec colname='c5' colwidth="1*"/>
<thead>
<row>
- <entry>�L���b�V��</entry>
+ <entry>キャッシュ</entry>
<entry>read-only</entry>
- <entry>�����ł͂Ȃ�read-write</entry>
+ <entry>厳密ではないread-write</entry>
<entry>read-write</entry>
<entry>transactional</entry>
</row>
</thead>
<tbody>
<row>
- <entry>Hashtable�i���i�p�Ƃ��ĈӐ}���Ă��܂���j</entry>
+ <entry>Hashtable(製品用として意図していません)</entry>
<entry>yes</entry>
<entry>yes</entry>
<entry>yes</entry>
@@ -893,19 +895,19 @@
</sect1>
<sect1 id="performance-sessioncache" revision="2">
- <title>�L���b�V���̊Ǘ�</title>
+ <title>キャッシュの管理</title>
<para>
- �I�u�W�F�N�g�� <literal>save()</literal> �A <literal>update()</literal> �A <literal>saveOrUpdate()</literal>
- �ɓn���Ƃ��A������ <literal>load()</literal> �A <literal>get()</literal> �A <literal>list()</literal> �A
- <literal>iterate()</literal> �A <literal>scroll()</literal> ��g���ăI�u�W�F�N�g������Ƃ��ɂ͏�ɁA
- ���̃I�u�W�F�N�g�� <literal>Session</literal> �̓���L���b�V���ɒlj�����܂��B
+ オブジェクトを <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> の内部キャッシュに追加されます。
</para>
<para>
- ���� <literal>flush()</literal> ���Ă��ƁA�I�u�W�F�N�g�̏�Ԃ̓f�[�^�x�[�X�Ɠ���������܂��B
- ������̓������N���邱�Ƃ�]�܂Ȃ��Ƃ���A�c��Ȑ��̃I�u�W�F�N�g�������Ă��ă�����������I��
- �����K�v������Ƃ��́A <literal>evict()</literal> ���\�b�h��g���Ĉꎟ�L���b�V������
- �I�u�W�F�N�g��R���N�V������폜���邱�Ƃ��o���܂��B
+ 次に <literal>flush()</literal> が呼ばれると、オブジェクトの状態はデータベースと同期化されます。
+ もしこの同期が起こることを望まないときや、膨大な数のオブジェクトを処理していてメモリを効率的に
+ 扱う必要があるときは、 <literal>evict()</literal> メソッドを使って一次キャッシュから
+ オブジェクトやコレクションを削除することが出来ます。
</para>
<programlisting><![CDATA[ScrollableResult cats = sess.createQuery("from Cat as cat").scroll(); //a huge result set
@@ -916,19 +918,19 @@
}]]></programlisting>
<para>
- <literal>Session</literal> �̓C���X�^���X���Z�b�V�����L���b�V���Ɋ܂܂�邩�ǂ����f���邽�߂�
- <literal>contains()</literal> ���\�b�h����܂��B
+ <literal>Session</literal> はインスタンスがセッションキャッシュに含まれるかどうかを判断するための
+ <literal>contains()</literal> メソッドも提供します。
</para>
<para>
- ���ׂẴI�u�W�F�N�g��Z�b�V�����L���b�V�����犮�S�Ɏ�菜���ɂ́A<literal>Session.clear()</literal>
- ��Ăяo���Ă��������B
+ すべてのオブジェクトをセッションキャッシュから完全に取り除くには、<literal>Session.clear()</literal>
+ を呼び出してください。
</para>
<para>
- �L���b�V���̂��߂ɁA <literal>SessionFactory</literal> �ɂ�
- �C���X�^���X�A�N���X�S�́A�R���N�V�����̃C���X�^���X�A�R���N�V�����S�̂�L���b�V������
- �폜���邽�߂̃��\�b�h�����ꂼ���`����Ă��܂��B
+ 二次キャッシュのために、 <literal>SessionFactory</literal> には
+ インスタンス、クラス全体、コレクションのインスタンス、コレクション全体をキャッシュから
+ 削除するためのメソッドがそれぞれ定義されています。
</para>
<programlisting><![CDATA[sessionFactory.evict(Cat.class, catId); //evict a particular Cat
@@ -937,40 +939,40 @@
sessionFactory.evictCollection("Cat.kittens"); //evict all kitten collections]]></programlisting>
<para>
- <literal>CacheMode</literal> �͓���̃Z�b�V�������L���b�V���Ƃǂ̂悤�ɑ��ݍ�p���邩��
- �w�肵�܂��B
+ <literal>CacheMode</literal> は特定のセッションが二次キャッシュとどのように相互作用するかを
+ 指定します。
</para>
<itemizedlist>
<listitem>
<para>
- <literal>CacheMode.NORMAL</literal> - �A�C�e���̓ǂݍ��݂Ə������݂œL���b�V����g���܂�
+ <literal>CacheMode.NORMAL</literal> - アイテムの読み込みと書き込みで二次キャッシュを使います
</para>
</listitem>
<listitem>
<para>
- <literal>CacheMode.GET</literal> - �ǂݍ��݂͓L���b�V������s���܂����A�f�[�^��
- �X�V�����ꍇ�����ēL���b�V���ɏ������݂��܂���B
+ <literal>CacheMode.GET</literal> - 読み込みは二次キャッシュから行いますが、データを
+ 更新した場合を除いて二次キャッシュに書き込みをしません。
</para>
</listitem>
<listitem>
<para>
- <literal>CacheMode.PUT</literal> - �L���b�V���ɃA�C�e���������݂܂����A�ǂݍ��݂ɂ�
- �L���b�V����g���܂���B
+ <literal>CacheMode.PUT</literal> - 二次キャッシュにアイテムを書き込みますが、読み込みには
+ 二次キャッシュを使いません。
</para>
</listitem>
<listitem>
<para>
- <literal>CacheMode.REFRESH</literal> - �L���b�V���ɃA�C�e���������݂܂����A�ǂݍ��݂ɂ�
- �L���b�V����g�킸�A <literal>hibernate.cache.use_minimal_puts</literal>
- �̉e������ɁA�f�[�^�x�[�X����ǂݍ��ނ��ׂẴA�C�e���̓L���b�V�������I�Ƀ��t���b�V�����܂��B
+ <literal>CacheMode.REFRESH</literal> - 二次キャッシュにアイテムを書き込みますが、読み込みには
+ 二次キャッシュを使わず、 <literal>hibernate.cache.use_minimal_puts</literal>
+ の影響を受けずに、データベースから読み込むすべてのアイテムの二次キャッシュを強制的にリフレッシュします。
</para>
</listitem>
</itemizedlist>
<para>
- �L���b�V���̓�e��N�G���L���b�V���̈���邽�߂ɁA <literal>Statistics</literal> API��
- �g�����������B
+ 二次キャッシュの内容やクエリキャッシュ領域を見るために、 <literal>Statistics</literal> APIを
+ 使ってください。
</para>
<programlisting><![CDATA[Map cacheEntries = sessionFactory.getStatistics()
@@ -978,8 +980,8 @@
.getEntries();]]></programlisting>
<para>
- ���v����L���ɂ��āA����ɃI�v�V�����Ƃ��āA�L���b�V���G���g����
- �l����藝��\�Ȍ`���ŕێ����邱�Ƃ�Hibernate�ɋ������܂��B
+ 統計情報を有効にして、さらにオプションとして、キャッシュエントリを
+ 人がより理解可能な形式で保持することをHibernateに強制します。
</para>
<programlisting><![CDATA[hibernate.generate_statistics true
@@ -988,35 +990,35 @@
</sect1>
<sect1 id="performance-querycache" revision="1">
- <title>�N�G���L���b�V��</title>
+ <title>クエリキャッシュ</title>
<para>
- �N�G���̃��U���g�Z�b�g��L���b�V���o���܂��B����͓����p�����[�^�ʼn��x����s�����
- �N�G���ɑ��Ă̂ݗL�p�ł��B�N�G���L���b�V����g���ɂ́A�܂��ݒ�ŗL���ɂ��Ȃ��Ă͂Ȃ�܂���B
+ クエリのリザルトセットもキャッシュ出来ます。これは同じパラメータで何度も実行される
+ クエリに対してのみ有用です。クエリキャッシュを使うには、まず設定で有効にしなくてはなりません。
</para>
<programlisting><![CDATA[hibernate.cache.use_query_cache true]]></programlisting>
<para>
- ���̐ݒ�͐V���ɓ�̃L���b�V���̈�̍쐬��s���܂��B��̓N�G���̃��U���g�Z�b�g��
- �L���b�V���i <literal>org.hibernate.cache.StandardQueryCache</literal> �j��ێ����A
- ���1�̓N�G���\�ȃe�[�u���ւ̍ŐV�̍X�V�^�C���X�^���v
- �i <literal>org.hibernate.cache.UpdateTimestampsCache</literal> �j��ێ����܂��B
- �N�G���L���b�V���̓��U���g�Z�b�g�̎��ۂ̗v�f�̏�Ԃ̓L���b�V�����Ȃ����Ƃ�
- ���ӂ��Ă��������B�L���b�V������͎̂��ʎq�̒l�ƁA�l�^�̌��ʂ݂̂ł��B
- ���̂��߁A�N�G���L���b�V���͏�ɓL���b�V���ƈꏏ�Ɏg���ׂ��ł��B
+ この設定は新たに二つのキャッシュ領域の作成を行います。一つはクエリのリザルトセットの
+ キャッシュ( <literal>org.hibernate.cache.StandardQueryCache</literal> )を保持し、
+ もう1つはクエリ可能なテーブルへの最新の更新タイムスタンプ
+ ( <literal>org.hibernate.cache.UpdateTimestampsCache</literal> )を保持します。
+ クエリキャッシュはリザルトセットの実際の要素の状態はキャッシュしないことに
+ 注意してください。キャッシュするのは識別子の値と、値型の結果のみです。
+ そのため、クエリキャッシュは常に二次キャッシュと一緒に使うべきです。
</para>
<para>
- �قƂ�ǂ̃N�G���̓L���b�V���̉��b��Ȃ��̂ŁA�f�t�H���g�ł̓N�G���̓L���b�V������܂���B
- �L���b�V����L���ɂ���ɂ́A <literal>Query.setCacheable(true)</literal> ��Ăяo���Ă��������B
- ��������N�G���������̃L���b�V�����ʂ�T���A�N�G�����s���ɂ��̌��ʂ�L���b�V���ɒlj�����
- �悤�ɂȂ�܂��B
+ ほとんどのクエリはキャッシュの恩恵を受けないので、デフォルトではクエリはキャッシュされません。
+ キャッシュを有効にするには、 <literal>Query.setCacheable(true)</literal> を呼び出してください。
+ そうすればクエリが既存のキャッシュ結果を探し、クエリ実行時にその結果をキャッシュに追加する
+ ようになります。
</para>
<para>
- �N�G���L���b�V���̔j���|���V�[��ׂ������䂵�����Ƃ��́A <literal>Query.setCacheRegion()</literal>
- ��Ăяo���ē���̃N�G���ɑ���L���b�V���̈��w�肷�邱�Ƃ��o���܂��B
+ クエリキャッシュの破棄ポリシーを細かく制御したいときは、 <literal>Query.setCacheRegion()</literal>
+ を呼び出して特定のクエリに対するキャッシュ領域を指定することが出来ます。
</para>
<programlisting><![CDATA[List blogs = sess.createQuery("from Blog blog where blog.blogger = :blogger")
@@ -1027,52 +1029,52 @@
.list();]]></programlisting>
<para>
- �N�G�������g�̃N�G���L���b�V���̈�̃��t���b�V���������Ȃ���Ȃ�Ȃ��Ȃ�A
- <literal>Query.setCacheMode(CacheMode.REFRESH)</literal> ��Ăяo���ׂ��ł��B�����
- ���ƂȂ�f�[�^���ʂ̃v���Z�X�ɂ���čX�V���ꂽ��i���Ȃ킿Hibernate��ʂ��čX�V����Ȃ��j�A
- �A�v���P�[�V�����ɓ���̃N�G�����U���g�Z�b�g��I���ă��t���b�V��������ꍇ�ɓ��ɗL�p�ł��B
- ����ɗL�p�Ȃ����̕��@�́A <literal>SessionFactory.evictQueries()</literal>
- �ɂ���ăN�G���L���b�V���̈��������邱�Ƃł��B
+ クエリが自身のクエリキャッシュ領域のリフレッシュを強制しなければならないなら、
+ <literal>Query.setCacheMode(CacheMode.REFRESH)</literal> を呼び出すべきです。これは
+ 元となるデータが別のプロセスによって更新されたり(すなわちHibernateを通じて更新されない)、
+ アプリケーションに特定のクエリリザルトセットを選択してリフレッシュさせる場合に特に有用です。
+ さらに有用なもう一つの方法は、 <literal>SessionFactory.evictQueries()</literal>
+ によってクエリキャッシュ領域を消去することです。
</para>
</sect1>
-��14.1
+☆14.1
<sect1 id="performance-collections">
- <title>�R���N�V�����̃p�t�H�[�}���X�̗���</title>
+ <title>コレクションのパフォーマンスの理解</title>
<para>
- �R���N�V�����̘b��ɂ͂��łɑ����̎��Ԃ�g���܂����B���̐߂ł�
- �R���N�V���������s���ɂǂ̂悤�ɐU�������ɂ��Ă̘b���2�A3���グ�܂��B
+ コレクションの話題にはすでに多くの時間を使いました。この節では
+ コレクションが実行時にどのように振舞うかについての話題を2、3取り上げます。
</para>
<sect2 id="performance-collections-taxonomy">
- <title>����</title>
+ <title>分類</title>
- <para>Hibernate��3�̊�{�I�ȃR���N�V�����̎�ނ��`���Ă��܂��B
+ <para>Hibernateは3つの基本的なコレクションの種類を定義しています。
</para>
<itemizedlist>
<listitem>
- <para>�l�̃R���N�V����</para>
+ <para>値のコレクション</para>
</listitem>
<listitem>
- <para>��Α��֘A</para>
+ <para>一対多関連</para>
</listitem>
<listitem>
- <para>���Α��֘A</para>
+ <para>多対多関連</para>
</listitem>
</itemizedlist>
<para>
- ���̕��ނ͂��܂��܂ȃe�[�u����O���L�[�֘A���ʂ��܂����A���������m��K�v�̂���
- �֘A���f���ɂ��ĂقƂ�ǂȂɂ�����Ă���܂���B�֘A�\����p�t�H�[�}���X�̓�����
- ���S�ɗ�����ɂ́AHibernate���R���N�V�����̍s��X�V�A�폜���邽�߂Ɏg����L�[��
- �\����܂��l���Ȃ���Ȃ�܂���B����͈ȉ��̕��ނ���܂��B
+ この分類はさまざまなテーブルや外部キー関連を区別しますが、私たちが知る必要のある
+ 関連モデルについてほとんどなにも教えてくれません。関連構造やパフォーマンスの特徴を
+ 完全に理解するには、Hibernateがコレクションの行を更新、削除するために使う主キーの
+ 構造もまた考えなければなりません。これは以下の分類を提示します。
</para>
<itemizedlist>
<listitem>
- <para>�C���f�b�N�X�t���R���N�V����</para>
+ <para>インデックス付きコレクション</para>
</listitem>
<listitem>
<para>set</para>
@@ -1083,86 +1085,86 @@
</itemizedlist>
<para>
- ���ׂẴC���f�b�N�X�t���R���N�V�����imap�Alist�A�z��j�� <literal><key></literal>
- �� <literal><index></literal> �J��������Ȃ��L�[�����Ă��܂��B���̏ꍇ��
- �R���N�V�����̍X�V�͔��Ɍ����I�ł��B��L�[�͗L�p�ȃC���f�b�N�X�ɂȂ�AHibernate��
- ����̍s��X�V�܂��͍폜����Ƃ��ɁA���̍s������I�Ɍ����邱�Ƃ��ł��܂��B
+ すべてのインデックス付きコレクション(map、list、配列)は <literal><key></literal>
+ と <literal><index></literal> カラムからなる主キーを持っています。この場合は
+ コレクションの更新は非常に効率的です。主キーは有用なインデックスになり、Hibernateが
+ 特定の行を更新または削除するときに、その行を効率的に見つけることができます。
</para>
<para>
- set�� <literal><key></literal> ����Ȃ��L�[�Ɨv�f�̃J���������Ă��܂��B
- ����̓R���N�V�����v�f�̂������̌^�ɂ��Ă͌����I�ł͂Ȃ��������܂���B
- ���ɕ����v�f�A�傫�ȃe�L�X�g�A�o�C�i���t�B�[���h�ł͔�����ł��B�f�[�^�x�[�X��
- ������L�[�Ɍ����I�ɃC���f�b�N�X��t���邱�Ƃ��ł��Ȃ�����ł��B����A1�Α��⑽�Α��֘A�ɂ����āA
- ���ɐl�H���ʎq�̏ꍇ�͓������炢�����I�ł��B�i�]�k�F <literal>SchemaExport</literal>
- �Ŏ��ۂ� <literal><set></literal> �̎�L�[���肽���Ȃ�A���ׂẴJ������
- <literal>not-null="true"</literal> ��錾���Ȃ���Ȃ�܂���B�j
+ setは <literal><key></literal> からなる主キーと要素のカラムを持っています。
+ これはコレクション要素のいくつかの型については効率的ではないかもしれません。
+ 特に複合要素、大きなテキスト、バイナリフィールドでは非効率です。データベースは
+ 複合主キーに効率的にインデックスを付けることができないからです。一方、1対多や多対多関連において、
+ 特に人工識別子の場合は同じぐらい効率的です。(余談: <literal>SchemaExport</literal>
+ で実際に <literal><set></literal> の主キーを作りたいなら、すべてのカラムで
+ <literal>not-null="true"</literal> を宣言しなければなりません。)
</para>
<para>
- <literal><idbag></literal> �}�b�s���O�͑㗝�L�[���`���܂��B���̂���
- �X�V�͏�ɔ��Ɍ����I�ł��B������A����͍őP�̃P�[�X�ł��B
+ <literal><idbag></literal> マッピングは代理キーを定義します。そのため
+ 更新は常に非常に効率的です。事実上、これは最善のケースです。
</para>
<para>
- bag�͍ň��̃P�[�X�ł��Bbag�͗v�f�̒l�̏d�����\�ŁA�C���f�b�N�X�J���������Ȃ����߁A
- ��L�[�͒�`����Ȃ��������܂���BHibernate�ɂ͏d�������s���ʂ�����@������܂���B
- Hibernate�͂��̖��̉��̂��߂ɁA�ύX���������Ƃ��ɂ͏�Ɋ��S�ȍ폜
- �i��� <literal>DELETE</literal> �ɂ��j��s���A�R���N�V�����̍č쐬��s���܂��B
- ����͔��ɔ�����I�������܂���B
+ bagは最悪のケースです。bagは要素の値の重複が可能で、インデックスカラムを持たないため、
+ 主キーは定義されないかもしれません。Hibernateには重複した行を区別する方法がありません。
+ Hibernateはこの問題の解決のために、変更があったときには常に完全な削除
+ (一つの <literal>DELETE</literal> による)を行い、コレクションの再作成を行います。
+ これは非常に非効率的かもしれません。
</para>
<para>
- 1�Α��֘A�ł́A�u��L�[�v�̓f�[�^�x�[�X�̃e�[�u���̕����I��
- ��L�[�ł͂Ȃ��������Ȃ����Ƃɒ��ӂ��Ă��������B���������̏ꍇ�ł����A��L�̕��ނ͂܂��L�p�ł��B
- �iHibernate���R���N�V�����̌X�̍s��ǂ�����āu�����邩�v��\���Ă��܂��B�j
+ 1対多関連では、「主キー」はデータベースのテーブルの物理的な
+ 主キーではないかもしれないことに注意してください。しかしこの場合でさえ、上記の分類はまだ有用です。
+ (Hibernateがコレクションの個々の行をどうやって「見つけるか」を表しています。)
</para>
</sect2>
<sect2 id="performance-collections-mostefficientupdate">
- <title>�X�V�ɂ���Ƃ�����I�ȃR���N�V���� list�Amap�Aidbag�Aset</title>
+ <title>更新にもっとも効率的なコレクション list、map、idbag、set</title>
<para>
- ��ł̋c�_����A�C���f�b�N�X�t���R���N�V�����Ɓi���ʂ́jset�͗v�f�̒lj��A�폜�A
- �X�V�ł���Ƃ�����I�ȑ��삪�o���邱�Ƃ͖��炩�ł��B
+ 上での議論から、インデックス付きコレクションと(普通の)setは要素の追加、削除、
+ 更新でもっとも効率的な操作が出来ることは明らかです。
</para>
<para>
- �قڊԈႢ�Ȃ��A���Α��֘A��l�̃R���N�V�����ɂ����āA�C���f�b�N�X�t���R���N�V������
- set����D��Ă���_����ȏ゠��܂��B <literal>Set</literal> �͂���
- �\���̂��߂ɁAHibernate�͗v�f���u�ύX�v���ꂽ�Ƃ��ɍs������ <literal>UPDATE</literal>
- ���܂���B <literal>Set</literal> �ւ̕ύX�͏�Ɂi�X�̍s�́j<literal>INSERT</literal>
- �� <literal>DELETE</literal> �ɂ���čs���܂��B�J��Ԃ��܂����A����͈�Α��֘A�ɂ�
- ���Ă͂܂�܂���B
+ ほぼ間違いなく、多対多関連や値のコレクションにおいて、インデックス付きコレクションが
+ setよりも優れている点が一つ以上あります。 <literal>Set</literal> はその
+ 構造のために、Hibernateは要素が「変更」されたときに行を決して <literal>UPDATE</literal>
+ しません。 <literal>Set</literal> への変更は常に(個々の行の)<literal>INSERT</literal>
+ と <literal>DELETE</literal> によって行います。繰り返しますが、これは一対多関連には
+ 当てはまりません。
</para>
<para>
- �z��͒x���������ł��Ȃ��Ƃ������܂�Ȃ̂ŁA���_�Ƃ��āAlist�Amap�Aidbag������Ƃ�
- �p�t�H�[�}���X�̗ǂ��iinverse�ł͂Ȃ��j�R���N�V�����^�C�v�ƂȂ�܂��Bset��
- ����قLjႢ�͂���܂���BHibernate�̃A�v���P�[�V�����ł́Aset�̓R���N�V�����̂���Ƃ�
- ���ʂ̎�ނƂ��Ċ��҂���܂��Bset�̕\���͊֘A���f���ł͂���Ƃ���R������ł��B
+ 配列は遅延処理ができないという決まりなので、結論として、list、map、idbagがもっとも
+ パフォーマンスの良い(inverseではない)コレクションタイプとなります。setも
+ それほど違いはありません。Hibernateのアプリケーションでは、setはコレクションのもっとも
+ 共通の種類として期待されます。setの表現は関連モデルではもっとも自然だからです。
</para>
<para>
- �������A�悭�f�U�C�����ꂽHibernate�̃h���C�����f���ł́A�ʏ����Ƃ�����R���N�V������
- ������ <literal>inverse="true"</literal> ��w�肵��1�Α��֘A�ł��B�����̊֘A�ł́A
- �X�V�͑��Έ�̊֘A�[�ň����A�R���N�V�����̍X�V�p�t�H�[�}���X�̖��͓��Ă͂܂�܂���B
+ しかし、よくデザインされたHibernateのドメインモデルでは、通常もっとも多いコレクションは
+ 事実上 <literal>inverse="true"</literal> を指定した1対多関連です。これらの関連では、
+ 更新は多対一の関連端で扱われ、コレクションの更新パフォーマンスの問題は当てはまりません。
</para>
</sect2>
<sect2 id="performance-collections-mostefficentinverse">
- <title>inverse�R���N�V�����ɂ���Ƃ�œK��bag��list</title>
+ <title>inverseコレクションにもっとも最適なbagとlist</title>
<para>
- bag�������Ă��܂��O�ɁAbag�i������list��j��set��������ƃp�t�H�[�}���X���ǂ����ʂȃP�[�X��
- �Љ�܂��B <literal>inverse="true"</literal> �̃R���N�V�����i��ʓI��1�Α��֘A�̎g�����Ȃǁj�ŁA
- bag�̗v�f�������i�t�F�b�`�j����K�v�Ȃ�bag��list�ɗv�f��lj��ł��܂��I
- ����� <literal>Collection.add()</literal> �� <literal>Collection.addAll()</literal>
- ��bag�� <literal>List</literal> �ł͏��true��Ԃ��Ȃ���Ȃ�Ȃ�����ł�
- �i <literal>Set</literal> �Ƃ͈قȂ�܂��j�B
- ����͈ȉ��̋��ʏ������葬�����邱�Ƃ��ł��܂��B
+ 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> とは異なります)。
+ これは以下の共通処理をより速くすることができます。
</para>
<programlisting><![CDATA[Parent p = (Parent) sess.load(Parent.class, id);
@@ -1174,54 +1176,54 @@
</sect2>
<sect2 id="performance-collections-oneshotdelete">
- <title>�ꊇ�폜</title>
+ <title>一括削除</title>
<para>
- ���X�A�R���N�V�����̗v�f����폜���邱�Ƃ͋ɂ߂Ĕ�����I�ɂȂ邱�Ƃ�����܂��B
- Hibernate�͋��ł͂Ȃ��̂ŁA�V������̃R���N�V�����̏ꍇ�i <literal>list.clear()</literal>
- ��Ăяo�����ꍇ�Ȃǁj�ł͂�����ׂ��łȂ����Ƃ�m���Ă��܂��B���̏ꍇ�́AHibernate��
- <literal>DELETE</literal> ���s���āA����ł��ׂďI���܂��I
+ 時々、コレクションの要素を一つ一つ削除することは極めて非効率的になることがあります。
+ Hibernateは愚かではないので、新しい空のコレクションの場合( <literal>list.clear()</literal>
+ を呼び出した場合など)ではこれをすべきでないことを知っています。この場合は、Hibernateは
+ <literal>DELETE</literal> を一回発行して、それですべて終わります!
</para>
<para>
- �T�C�Y20�̃R���N�V�����Ɉ�̗v�f��lj����A���ꂩ���̗v�f��폜����Ƃ��܂��B
- Hibernate�͈�� <literal>INSERT</literal> ���Ɠ�� <literal>DELETE</literal> ���s���܂�
- �i�R���N�V������bag�łȂ���j�B����͊m���ɖ]�܂�������ł��B
+ サイズ20のコレクションに一つの要素を追加し、それから二つの要素を削除するとします。
+ Hibernateは一つの <literal>INSERT</literal> 文と二つの <literal>DELETE</literal> 文を発行します
+ (コレクションがbagでなければ)。これは確かに望ましい動作です。
</para>
<para>
- �������A18�̗v�f��폜����2��c���A���ꂩ��3�V�����v�f��lj�����Ƃ��܂��B
- ���̂Ƃ���̕��@������܂��B
+ しかし、18個の要素を削除して2つを残し、それから3つ新しい要素を追加するとします。
+ このとき二つの方法があります。
</para>
<itemizedlist>
<listitem>
<para>
- 18�s����폜���āA3�s��lj�����
+ 18行を一つ一つ削除して、3行を追加する
</para>
</listitem>
<listitem>
<para>
- �R���N�V�����S�̂�폜�i <literal>DELETE</literal> ��SQL����j���A������5�̗v�f���ׂĂ�
- �i����j�lj�����
+ コレクション全体を削除( <literal>DELETE</literal> のSQLを一回)し、そして5つの要素すべてを
+ (一つずつ)追加する
</para>
</listitem>
</itemizedlist>
<para>
- Hibernate�͂��̏ꍇ��2�Ԗڂ̕��@����葬�����낤�Ƃ킩��قnj����͂���܂���B
- �i������Hibernate�����̂悤�Ɍ������Ƃ�]�܂����Ȃ��ł��傤�B���̂悤�ȐU�镑����
- �f�[�^�x�[�X�̃g���K�Ȃǂ��������邩�����܂���B�j
+ Hibernateはこの場合に2番目の方法がより速いだろうとわかるほど賢くはありません。
+ (そしてHibernateがこのように賢いことも望ましくないでしょう。このような振る舞いは
+ データベースのトリガなどを混乱させるかもしれません。)
</para>
<para>
- �K���ɂ�A���̃R���N�V������̂āi�܂�Q�Ƃ��߂āj�A���݂̗v�f���ׂĎ��V�����R���N�V������
- �C���X�^���X��Ԃ����ƂŁA���ł���̐U�镑���i2�Ԗڂ̐헪�j�������邱�Ƃ��o���܂��B
- ���ɂ���͂ƂĂ�֗��ŋ��͂ł��B
+ 幸いにも、元のコレクションを捨て(つまり参照をやめて)、現在の要素をすべて持つ新しいコレクションの
+ インスタンスを返すことで、いつでもこの振る舞い(2番目の戦略)を強制することが出来ます。
+ 時にこれはとても便利で強力です。
</para>
<para>
- ������A�ꊇ�폜�� <literal>inverse="true"</literal> ��w�肵���R���N�V�����ɂ͍s���܂���B
+ もちろん、一括削除は <literal>inverse="true"</literal> を指定したコレクションには行いません。
</para>
</sect2>
@@ -1229,28 +1231,28 @@
</sect1>
<sect1 id="performance-monitoring" revision="1">
- <title>�p�t�H�[�}���X�̃��j�^�����O</title>
+ <title>パフォーマンスのモニタリング</title>
<para>
- �œK���̓��j�^�����O��p�t�H�[�}���X�������l���Ȃ���Ώ\���ɍs���܂���B
- Hibernate�͓�������̂��ׂĂ͈̔͂̐��l����܂��B
- Hibernate�̓��v���� <literal>SessionFactory</literal> �P�ʂŎ擾�\�ł��B
+ 最適化はモニタリングやパフォーマンスを示す数値がなければ十分に行えません。
+ Hibernateは内部処理のすべての範囲の数値を提供します。
+ Hibernateの統計情報は <literal>SessionFactory</literal> 単位で取得可能です。
</para>
<sect2 id="performance-monitoring-sf" revision="2">
- <title>SessionFactory�̃��j�^�����O</title>
+ <title>SessionFactoryのモニタリング</title>
<para>
- <literal>SessionFactory</literal> �̃��g���N�X�ɃA�N�Z�X����ɂ�2�̕��@������܂��B
- �ŏ��̕��@�́A <literal>sessionFactory.getStatistics()</literal> ��Ăяo���A
- ������ <literal>Statistics</literal> �̓ǂݍ��݂�\����s���܂��B
+ <literal>SessionFactory</literal> のメトリクスにアクセスするには2つの方法があります。
+ 最初の方法は、 <literal>sessionFactory.getStatistics()</literal> を呼び出し、
+ 自分で <literal>Statistics</literal> の読み込みや表示を行います。
</para>
<para>
- <literal>StatisticsService</literal> MBean��L���ɂ��Ă���AHibernate��JMX��g����
- ���g���N�X�s���邱�Ƃ�ł��܂��B1��MBean���ׂĂ� <literal>SessionFactory</literal>
- �ɑ��ėL���ɂ��邩�ASessionFactory���ƂɈ��MBean��L���ɂ��邱�Ƃ��o���܂��B
- �ŏ����̐ݒ��ł���ȉ��̃R�[�h���Ă��������B
+ <literal>StatisticsService</literal> MBeanを有効にしていれば、HibernateはJMXを使って
+ メトリクスを発行することもできます。1つのMBeanをすべての <literal>SessionFactory</literal>
+ に対して有効にするか、SessionFactoryごとに一つのMBeanを有効にすることが出来ます。
+ 最小限の設定例である以下のコードを見てください。
</para>
<programlisting><![CDATA[// MBean service registration for a specific SessionFactory
@@ -1274,77 +1276,77 @@
server.registerMBean(stats, on); // Register the MBean on the server]]></programlisting>
<para>
- TODO: ����͈Ӗ�������܂���B�ŏ��̃P�[�X�́AMBean�ڕ������Ďg�p���܂��B2�Ԗڂ̃P�[�X�́A
- �g���O��session factory�������Ă���JNDI����n���Ȃ���Ȃ�܂���B
- <literal>hibernateStatsBean.setSessionFactoryJNDIName("my/JNDI/Name")</literal> ��g�����������B
+ TODO: これは意味がありません。最初のケースは、MBeanを直接復元して使用します。2番目のケースは、
+ 使う前にsession factoryが持っているJNDI名を渡さなければなりません。
+ <literal>hibernateStatsBean.setSessionFactoryJNDIName("my/JNDI/Name")</literal> を使ってください。
</para>
<para>
- <literal>SessionFactory</literal> �ɑ��ă��j�^�����O�̊J�n�i�I���j��s�����Ƃ��o���܂��B
+ <literal>SessionFactory</literal> に対してモニタリングの開始(終了)を行うことが出来ます。
</para>
<itemizedlist>
<listitem>
<para>
- �ݒ莞�ɂ́A <literal>hibernate.generate_statistics</literal> �� <literal>false</literal> �ɂ��܂�
+ 設定時には、 <literal>hibernate.generate_statistics</literal> を <literal>false</literal> にします
</para>
</listitem>
</itemizedlist>
<itemizedlist>
<listitem>
<para>
- ���s���ɁA <literal>sf.getStatistics().setStatisticsEnabled(true)</literal> �܂���
- <literal>hibernateStatsBean.setStatisticsEnabled(true)</literal> ��Ăяo���܂�
+ 実行時に、 <literal>sf.getStatistics().setStatisticsEnabled(true)</literal> または
+ <literal>hibernateStatsBean.setStatisticsEnabled(true)</literal> を呼び出します
</para>
</listitem>
</itemizedlist>
<para>
- ���v�� <literal>clear()</literal> ���\�b�h��g���Ď蓮�Ń��Z�b�g���邱�Ƃ��o���܂��B
- �T�}���� <literal>logSummary()</literal> ���\�b�h��g����logger�ɑ��邱�Ƃ��o���܂�
- �iinfo���x���ł��j�B
+ 統計は <literal>clear()</literal> メソッドを使って手動でリセットすることが出来ます。
+ サマリは <literal>logSummary()</literal> メソッドを使ってloggerに送ることが出来ます
+ (infoレベルです)。
</para>
</sect2>
<sect2 id="performance-monitoring-metrics" revision="1">
- <title>���g���N�X</title>
+ <title>メトリクス</title>
<para>
- �����̂�̂�����܂��B���ׂĂ̎g�p�\�ȃJ�E���^�� <literal>Statistics</literal>
- �C���^�[�t�F�C�X��API�ɏ�����Ă���A3�̕��ނ�����܂��B
+ 多くのものがあります。すべての使用可能なカウンタは <literal>Statistics</literal>
+ インターフェイスのAPIに書かれており、3つの分類があります。
</para>
<itemizedlist>
<listitem>
<para>
- ���g���N�X�͈�ʓI�� <literal>Session</literal> �̎g�����ƊW���Ă��܂��B
- �I�[�v�������Z�b�V�����̐���JDBC�R�l�N�V�����Ɗ֘A���Ă���̂Ɠ����ł��B
+ メトリクスは一般的な <literal>Session</literal> の使い方と関係しています。
+ オープンしたセッションの数がJDBCコネクションと関連しているのと同じです。
</para>
</listitem>
<listitem>
<para>
- ���g���N�X�͗v�f�A�R���N�V�����A�N�G����L���b�V���ȂǑS�̂�
- �W���Ă��܂��i�ʖ��̓O���[�o�����g���N�X�ł��j�B
+ メトリクスは要素、コレクション、クエリやキャッシュなど全体に
+ 関係しています(別名はグローバルメトリクスです)。
</para>
</listitem>
<listitem>
<para>
- ���g���N�X�̏ڍׂ͓���̃G���e�B�e�B�A�R���N�V�����A�N�G���A�L���b�V���̈�ɊW���Ă��܂��B
+ メトリクスの詳細は特定のエンティティ、コレクション、クエリ、キャッシュ領域に関係しています。
</para>
</listitem>
</itemizedlist>
<para>
- ��Ƃ��āA�L���b�V���̃q�b�g�A�q�b�g�~�X��A�v�f�A�R���N�V�����A�N�G���̊����A�N�G���̎��s��
- �K�v�ȕ��ώ��Ԃ�m�F�ł��܂��B�~���b�̐��l��Java�̋ߎ���邱�Ƃɒ��ӂ��Ă��������B
- Hibernate��JVM�̐��x�ɐ�������A�v���b�g�t�H�[���ɂ���Ă�10�b�P�ʂł������m�łȂ��������܂���B
+ 例として、キャッシュのヒット、ヒットミスや、要素、コレクション、クエリの割合、クエリの実行に
+ 必要な平均時間を確認できます。ミリ秒の数値はJavaの近似を受けることに注意してください。
+ HibernateはJVMの精度に制限され、プラットフォームによっては10秒単位でしか正確でないかもしれません。
</para>
<para>
- �P����getter�̓O���[�o�����g���N�X�i���Ȃ킿����̃G���e�B�e�B�A�R���N�V�����A�L���b�V���̈�Ȃǂɔ����Ȃ��j
- �ɃA�N�Z�X���邽�߂Ɏg���܂��B����̃G���e�B�e�B�A�R���N�V�����A�L���b�V���̈�̃��g���N�X�́A
- �����̖��O��A�N�G����HQL�ASQL�\���ɂ���ăA�N�Z�X���邱�Ƃ��o���܂��B����ɏڂ������́A
- <literal>Statistics</literal> �A <literal>EntityStatistics</literal> �A <literal>CollectionStatistics</literal>
- �A <literal>SecondLevelCacheStatistics</literal> �A <literal>QueryStatistics</literal> API��javadoc��
- �Q�Ƃ��Ă��������B�ȉ��̃R�[�h�͊ȒP�ȗ�ł��B
+ 単純なgetterはグローバルメトリクス(すなわち特定のエンティティ、コレクション、キャッシュ領域などに縛られない)
+ にアクセスするために使います。特定のエンティティ、コレクション、キャッシュ領域のメトリクスは、
+ それらの名前や、クエリのHQL、SQL表現によってアクセスすることが出来ます。さらに詳しい情報は、
+ <literal>Statistics</literal> 、 <literal>EntityStatistics</literal> 、 <literal>CollectionStatistics</literal>
+ 、 <literal>SecondLevelCacheStatistics</literal> 、 <literal>QueryStatistics</literal> APIのjavadocを
+ 参照してください。以下のコードは簡単な例です。
</para>
<programlisting><![CDATA[Statistics stats = HibernateUtil.sessionFactory.getStatistics();
@@ -1365,14 +1367,14 @@
log.info(Cat.class.getName() + " changed " + changes + "times" );]]></programlisting>
<para>
- ���ׂẴG���e�B�e�B�A�R���N�V�����A�N�G���A�L���b�V���̈�ɑ��čs���ꍇ�́A
- <literal>getQueries()</literal> �A <literal>getEntityNames()</literal>�A
- <literal>getCollectionRoleNames()</literal> �A <literal>getSecondLevelCacheRegionNames()</literal> ���\�b�h��
- ���ꂼ��̖��O�̃��X�g��擾���邱�Ƃ��o���܂��B
+ すべてのエンティティ、コレクション、クエリ、キャッシュ領域に対して行う場合は、
+ <literal>getQueries()</literal> 、 <literal>getEntityNames()</literal>、
+ <literal>getCollectionRoleNames()</literal> 、 <literal>getSecondLevelCacheRegionNames()</literal> メソッドで
+ それぞれの名前のリストを取得することが出来ます。
</para>
</sect2>
</sect1>
-</chapter>
\ No newline at end of file
+</chapter>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/persistent_classes.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/persistent_classes.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/persistent_classes.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,28 +1,30 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="persistent-classes" revision="2">
- <title>�i���N���X</title>
+ <title>永続クラス</title>
<para>
- �i���N���X�̓r�W�l�X��̖��̃G���e�B�e�B�i�Ⴆ�AE�R�}�[�X�A�v���P�[�V�����̌ڋq�⒍���j
- ���������A�v���P�[�V�����̃N���X�ł��B
- �i���N���X�̂��ׂẴC���X�^���X���i����Ԃł���ƌ��Ȃ����킯�ł͂���܂���B
- �C���X�^���X�͋t�Ɉꎞ�I�itransient�j�ł�������A������ԁidetached�j�ł������肷�邩�����܂���B
+ 永続クラスはビジネス上の問題のエンティティ(例えば、Eコマースアプリケーションの顧客や注文)
+ を実装するアプリケーションのクラスです。
+ 永続クラスのすべてのインスタンスが永続状態であると見なされるわけではありません。
+ インスタンスは逆に一時的(transient)であったり、分離状態(detached)であったりするかもしれません。
</para>
<para>
- Plain Old Java Object (POJO)�v���O���~���O���f���Ƃ��Ă�m����
- �������̒P���ȃ��[���ɏ]���Ȃ�AHibernate�͍ł�悭�����܂��B
- �����������̃��[���͓����̂ł͂���܂���B
- ����Hibernate3�͉i���I�u�W�F�N�g�̐����ɂقƂ�lj��̑O���u���Ă��܂���B
- �h���C�����f���͑��̕��@�ŕ\�����邱�Ƃ�ł��܂��B
- �Ⴆ�� <literal>Map</literal> �C���X�^���X�̃c���[��g�����@������܂��B
+ Plain Old Java Object (POJO)プログラミングモデルとしても知られる
+ いくつかの単純なルールに従うなら、Hibernateは最もよく働きます。
+ しかしこれらのルールは難しいものではありません。
+ 実際Hibernate3は永続オブジェクトの性質にほとんど何の前提も置いていません。
+ ドメインモデルは他の方法で表現することもできます。
+ 例えば <literal>Map</literal> インスタンスのツリーを使う方法があります。
</para>
<sect1 id="persistent-classes-pojo">
- <title>�P����POJO�̗�</title>
+ <title>単純なPOJOの例</title>
<para>
- �قƂ�ǂ�Java�A�v���P�[�V�����ɂ̓l�R�Ȃ̓�����\������i���N���X���K�v�ł��B
+ ほとんどのJavaアプリケーションにはネコ科の動物を表現する永続クラスが必要です。
</para>
<programlisting><![CDATA[package eg;
@@ -105,51 +107,51 @@
}]]></programlisting>
<para>
- �]���ׂ�4�̃��[��������܂��F
+ 従うべき4つのルールがあります:
</para>
<sect2 id="persistent-classes-pojo-constructor" revision="1">
- <title>�����̂Ȃ��R���X�g���N�^���������</title>
+ <title>引数のないコンストラクタを実装する</title>
<para>
- <literal>Cat</literal> �ɂ͈����̂Ȃ��R���X�g���N�^������܂��B
- Hibernate�� <literal>Constructor.newInstance()</literal> ��g���ĉi���N���X��
- �C���X�^���X����s����悤�ɁA���ׂẲi���N���X�ɂ̓f�t�H���g�R���X�g���N�^
- �ipublic�łȂ��Ă�\���܂���j���Ȃ���Ȃ�܂���B
- Hibernate�̎��s���v���L�V�����̂��߂ɁA���Ȃ��Ƃ� <emphasis>package</emphasis>
- �̉������f�t�H���g�R���X�g���N�^���������߂��܂��B
+ <literal>Cat</literal> には引数のないコンストラクタがあります。
+ Hibernateが <literal>Constructor.newInstance()</literal> を使って永続クラスの
+ インスタンス化を行えるように、すべての永続クラスにはデフォルトコンストラクタ
+ (publicでなくても構いません)がなければなりません。
+ Hibernateの実行時プロキシ生成のために、少なくとも <emphasis>package</emphasis>
+ の可視性を持つデフォルトコンストラクタを強くお勧めします。
</para>
</sect2>
<sect2 id="persistent-classes-pojo-identifier" revision="2">
- <title>���ʎq�v���p�e�B��p�ӂ���i�I�v�V�����j</title>
+ <title>識別子プロパティを用意する(オプション)</title>
<para>
- <literal>Cat</literal> �ɂ� <literal>id</literal> �Ƃ����v���p�e�B������܂��B
- ���̃v���p�e�B�̓f�[�^�x�[�X�e�[�u���̎�L�[�J�����փ}�b�s���O����܂��B
- ���̃v���p�e�B�̖��O�͉��ł�\���܂��A�^�͂ǂ̂悤�ȃv���~�e�B�u�^�ł�A
- �v���~�e�B�u�́u���b�p�[�v�^�ł�A<literal>java.lang.String</literal> ��
- <literal>java.util.Date</literal> �ł�\���܂���B
- �i������K�V�[�f�[�^�x�[�X�e�[�u���������L�[���Ȃ�A
- ���q�ׂ��悤�Ȍ^�̃v���p�e�B�����[�U��`�̃N���X��g�����Ƃ����\�ł��B
- ��ŕ������ʎq�̐߂��Ă��������B�j
+ <literal>Cat</literal> には <literal>id</literal> というプロパティがあります。
+ このプロパティはデータベーステーブルの主キーカラムへマッピングされます。
+ このプロパティの名前は何でも構いませんし、型はどのようなプリミティブ型でも、
+ プリミティブの「ラッパー」型でも、<literal>java.lang.String</literal> や
+ <literal>java.util.Date</literal> でも構いません。
+ (もしレガシーデータベーステーブルが複合キーを持つならば、
+ 今述べたような型のプロパティを持つユーザ定義のクラスを使うことさえ可能です。
+ 後で複合識別子の節を見てください。)
</para>
<para>
- ���ʎq�v���p�e�B�͌����ɂ̓I�v�V�����ł��B
- �����ȗ����āAHibernate�ɓ���I�ɃI�u�W�F�N�g�̎��ʎq��ǐՂ����邱�Ƃ͉\�ł��B
- �������������߂͂��܂���B
+ 識別子プロパティは厳密にはオプションです。
+ これを省略して、Hibernateに内部的にオブジェクトの識別子を追跡させることは可能です。
+ しかしおすすめはしません。
</para>
<para>
- ���ۂɁA���ʎq�v���p�e�B��錾����N���X���������p�\�ȋ@�\������������܂��F
+ 実際に、識別子プロパティを宣言するクラスだけが利用可能な機能がいくつかあります:
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- �����I�u�W�F�N�g�̘A���I�ȍĒlj��i�J�X�P�[�h�X�V��J�X�P�[�h�}�[�W�j�B
- <xref linkend="objectstate-transitive"/> ��Q�Ƃ��Ă��������B
+ 分離オブジェクトの連鎖的な再追加(カスケード更新やカスケードマージ)。
+ <xref linkend="objectstate-transitive"/> を参照してください。
</para>
</listitem>
<listitem>
@@ -165,47 +167,47 @@
</itemizedlist>
<para>
- �i���N���X�ɂ́A��т������O�̎��ʎq�v���p�e�B���`���邱�Ƃ����߂��܂��B
- �����null�l�����(�܂�v���~�e�B�u�ł͂Ȃ�)�^��g���������悢�ł��傤�B
+ 永続クラスには、一貫した名前の識別子プロパティを定義することをお勧めします。
+ さらにnull値を取れる(つまりプリミティブではない)型を使った方がよいでしょう。
</para>
</sect2>
<sect2 id="persistent-classes-pojo-final">
- <title>final�N���X�ɂ��Ȃ��i�I�v�V�����j</title>
+ <title>finalクラスにしない(オプション)</title>
<para>
- Hibernate�̒��S�I�ȓ����ł��� <emphasis>�v���L�V</emphasis> �́A
- �i���N���X��final�łȂ����ƁA�܂��̓��\�b�h��S��public�Ő錾���Ă���
- �C���^�[�t�F�C�X����������Ă��邩�Ɉˑ����Ă��܂��B
+ Hibernateの中心的な特徴である <emphasis>プロキシ</emphasis> は、
+ 永続クラスがfinalでないこと、またはメソッドを全部publicで宣言している
+ インターフェイスが実装されているかに依存しています。
</para>
<para>
- Hibernate�ŃC���^�[�t�F�C�X��������Ă��Ȃ� <literal>final</literal> �N���X��i�������邱�Ƃ͂ł��܂����A
- �x���֘A�t�F�b�`�ɑ��ăv���L�V��g�����Ƃ͂ł��Ȃ��Ȃ�܂��B
- ����̓p�t�H�[�}���X�`���[�j���O�ւ̑I�����߂邱�ƂɂȂ�܂��B
+ Hibernateでインターフェイスを実装していない <literal>final</literal> クラスを永続化することはできますが、
+ 遅延関連フェッチに対してプロキシを使うことはできなくなります。
+ これはパフォーマンスチューニングへの選択肢を狭めることになります。
</para>
<para>
- final�ł͂Ȃ��N���X�� <literal>public final</literal> ���\�b�h���`���邱�Ƃ����ׂ��ł��B
- <literal>public final</literal> ���\�b�h���N���X��g��������A
- <literal>lazy="false"</literal> �Ɛݒ肵�Ė����I�Ƀv���L�V���ɂ��Ȃ���Ȃ�܂���B
+ finalではないクラスで <literal>public final</literal> メソッドを定義することも避けるべきです。
+ <literal>public final</literal> メソッドを持つクラスを使いたければ、
+ <literal>lazy="false"</literal> と設定して明示的にプロキシを無効にしなければなりません。
</para>
</sect2>
<sect2 id="persistent-classes-pojo-accessors" revision="2">
- <title>�i���t�B�[���h�ɑ���A�N�Z�T�ƃ~���[�e�[�^���`����i�I�v�V�����j</title>
+ <title>永続フィールドに対するアクセサとミューテータを定義する(オプション)</title>
<para>
- <literal>Cat</literal> �ł͂��ׂẲi���t�B�[���h�ɑ��ăA�N�Z�T���\�b�h���`���Ă��܂��B
- ���̑�����ORM�c�[���́A�i���C���X�^���X�ϐ��ډi�������܂��B
- �������̓����[�V���i���X�L�[�}�ƃN���X�̓���\������������ǂ��ƐM���Ă��܂��B
- �f�t�H���g�ł́AHibernate��JavaBean�X�^�C���̃v���p�e�B��i�������A
+ <literal>Cat</literal> ではすべての永続フィールドに対してアクセサメソッドを定義しています。
+ 他の多くのORMツールは、永続インスタンス変数を直接永続化します。
+ 私たちはリレーショナルスキーマとクラスの内部構造を分離する方が良いと信じています。
+ デフォルトでは、HibernateはJavaBeanスタイルのプロパティを永続化し、
<literal>getFoo</literal>, <literal>isFoo</literal>, <literal>setFoo</literal>
- �`���̃��\�b�h����F�����܂��B
- �������K�v�Ȃ�A����̃v���p�e�B�ɑ��āA���ڂ̃t�B�[���h�A�N�Z�X�ɐ�ւ��邱�Ƃ͉\�ł��B
+ 形式のメソッド名を認識します。
+ しかし必要なら、特定のプロパティに対して、直接のフィールドアクセスに切り替えることは可能です。
</para>
<para>
- �v���p�e�B��public�Ő錾����K�v�� <emphasis>����܂���</emphasis> �B
- Hibernate�̓f�t�H���g�A<literal>protected</literal> ������� <literal>private</literal>
- ��get / set�̃y�A���v���p�e�B��i�������邱�Ƃ��ł��܂��B
+ プロパティはpublicで宣言する必要は <emphasis>ありません</emphasis> 。
+ Hibernateはデフォルト、<literal>protected</literal> もしくは <literal>private</literal>
+ のget / setのペアを持つプロパティを永続化することができます。
</para>
</sect2>
@@ -213,11 +215,11 @@
</sect1>
<sect1 id="persistent-classes-inheritance">
- <title>�p���̎���</title>
+ <title>継承の実装</title>
<para>
- �T�u�N���X��1�Ԗڂ�2�Ԗڂ̃��[������Ȃ���Ȃ�܂���B
- �T�u�N���X�̓X�[�p�[�N���X <literal>Cat</literal> ���环�ʎq�v���p�e�B��p�����܂��B
+ サブクラスも1番目と2番目のルールを守らなければなりません。
+ サブクラスはスーパークラス <literal>Cat</literal> から識別子プロパティを継承します。
</para>
<programlisting><![CDATA[package eg;
@@ -235,60 +237,60 @@
</sect1>
<sect1 id="persistent-classes-equalshashcode" revision="1">
- <title><literal>equals()</literal> �� <literal>hashCode()</literal> �̎���</title>
+ <title><literal>equals()</literal> と <literal>hashCode()</literal> の実装</title>
<para>
- �ȉ��̏��̏ꍇ�A
- <literal>equals()</literal> �� <literal>hashCode()</literal> ���\�b�h��I�[�o�[���C�h���Ȃ���Ȃ�܂���A
+ 以下の条件の場合、
+ <literal>equals()</literal> と <literal>hashCode()</literal> メソッドをオーバーライドしなければなりません、
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- �i���N���X�̃C���X�^���X�� <literal>Set</literal> �ɒu���ꍇ�B
- �i����͑��l�̊֘A��\�����邨�����߂̕��@�ł��j
- <emphasis>�����ē�����</emphasis>
+ 永続クラスのインスタンスを <literal>Set</literal> に置く場合。
+ (これは多値の関連を表現するおすすめの方法です)
+ <emphasis>そして同時に</emphasis>
</para>
</listitem>
<listitem>
<para>
- �����C���X�^���X��Z�b�V�����֍Ēlj�����ꍇ�B
+ 分離インスタンスをセッションへ再追加する場合。
</para>
</listitem>
</itemizedlist>
<para>
- Hibernate�́A�i��ID�i�f�[�^�x�[�X�̍s�j�ƁA����̃Z�b�V�����X�R�[�v���
- ����ł���JavaID�Ƃ������ł��邱�Ƃ�ۏ��܂��B
- �ł�����قȂ�Z�b�V�����Ō��������C���X�^���X��g�ݍ��킹��ꍇ�A
- <literal>Set</literal> �ɈӖ��̂���Z�}���e�B�N�X�������悤�Ǝv���Ă���Ȃ�
- ������<literal>equals()</literal> �� <literal>hashCode()</literal>
- ��������Ȃ���Ȃ�܂���B
+ Hibernateは、永続ID(データベースの行)と、特定のセッションスコープ内に
+ 限定ですがJavaIDとが等価であることを保証します。
+ ですから異なるセッションで検索したインスタンスを組み合わせる場合、
+ <literal>Set</literal> に意味のあるセマンティクスを持たせようと思っているなら
+ すぐに<literal>equals()</literal> と <literal>hashCode()</literal>
+ を実装しなければなりません。
</para>
<para>
- �ł�����ȕ��@�́A�����̃I�u�W�F�N�g�̎��ʎq�̒l�̔�r�ɂ���� <literal>equals()</literal>��
- <literal>hashCode()</literal> �����������@�ł��B
- �l�������Ȃ�A���҂̓f�[�^�x�[�X�̓����s�łȂ���Ȃ�Ȃ����ߓ������Ȃ�܂��B
- �i���҂� <literal>Set</literal> �ɒlj�����Ă�A
- <literal>Set</literal> �ɂ�1�̗v�f�����Ȃ����ƂɂȂ�܂��j
- �c�O�Ȃ��ƂɁA�������ꂽ���ʎq�ɂ͂��̃A�v���[�`��g�����Ƃ��ł��܂���B
- Hibernate�͉i�������ꂽ�I�u�W�F�N�g�֎��ʎq�̒l�������邾���ł���A
- �V�����쐬���ꂽ�C���X�^���X�͂ǂ̂悤�Ȏ��ʎq�̒l������Ă��܂���B
- ����ɁA�C���X�^���X���Z�[�u����Ă��炸�A���� <literal>Set</literal> �̒��ɂ���A
- �Z�[�u����ƃI�u�W�F�N�g�֎��ʎq�̒l�������邱�ƂɂȂ�܂��B
- ��� <literal>equals()</literal> �� <literal>hashCode()</literal> �����ʎq�̒l�Ɋ�Â��Ă���Ȃ�A
- �n�b�V���R�[�h���ύX������ <literal>Set</literal> �̋K�j���܂��B
- ���̖��ɂ��Ă̊��S�ȋc�_�́AHibernate�̃E�F�u�T�C�g���Ă��������B
- �����Hibernate�̖��ł͂Ȃ��A�I�u�W�F�N�g�̓��ꐫ�Ɠ������ɂ��ẮA
- �ʏ��Java�̃Z�}���e�B�N�X�ł��邱�Ƃɒ��ӂ��Ă��������B
+ 最も明白な方法は、両方のオブジェクトの識別子の値の比較によって <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のセマンティクスであることに注意してください。
</para>
<para>
- <emphasis>�r�W�l�X�L�[�̓�����</emphasis> ��g���āA
- <literal>equals()</literal> �� <literal>hashCode()</literal> ��������邱�Ƃ����߂��܂��B
- �r�W�l�X�L�[�̓������Ƃ́A<literal>equals()</literal> ���\�b�h���A�r�W�l�X�L�[�A
- �܂茻���̐��E�ɂ����ăC���X�^���X����肷��L�[�i<emphasis>���R</emphasis> ���L�[�j
- ��`������v���p�e�B�������r���邱�Ƃ�Ӗ����܂��B
+ <emphasis>ビジネスキーの等価性</emphasis> を使って、
+ <literal>equals()</literal> と <literal>hashCode()</literal> を実装することをお勧めします。
+ ビジネスキーの等価性とは、<literal>equals()</literal> メソッドが、ビジネスキー、
+ つまり現実の世界においてインスタンスを特定するキー(<emphasis>自然</emphasis> 候補キー)
+ を形成するプロパティだけを比較することを意味します。
</para>
<programlisting><![CDATA[public class Cat {
@@ -316,39 +318,39 @@
}]]></programlisting>
<para>
- �r�W�l�X�L�[�̓f�[�^�x�[�X�̎�L�[���قLj���ł���K�v�͂Ȃ����Ƃɒ��ӂ��Ă�������
- �i<xref linkend="transactions-basics-identity"/> �����������j�B
- �X�V�s�ȃv���p�e�B��j�[�N�ȃv���p�e�B�́A�ʏ�r�W�l�X�L�[�̂悢���ł��B
+ ビジネスキーはデータベースの主キー候補ほど安定である必要はないことに注意してください
+ (<xref linkend="transactions-basics-identity"/> を見てください)。
+ 更新不可なプロパティやユニークなプロパティは、通常ビジネスキーのよい候補です。
</para>
</sect1>
<sect1 id="persistent-classes-dynamicmodels">
- <title>���I���f��</title>
+ <title>動的モデル</title>
<para>
- <emphasis>�ȉ��̋@�\�͌��ݎ����i�K�ɂ���ƌ��Ȃ���Ă���A
- �߂������ύX�����\�������邱�Ƃɒ��ӂ��Ă��������B</emphasis>
+ <emphasis>以下の機能は現在実験段階にあると見なされており、
+ 近い将来変更される可能性があることに注意してください。</emphasis>
</para>
<para>
- �i���G���e�B�e�B�́A�K��������s����POJO�N���X��JavaBean�I�u�W�F�N�g�ŕ\������K�v�͂���܂���B
- Hibernate�́i���s���� <literal>Map</literal> �� <literal>Map</literal> ��g���j���I���f���ƁA
- DOM4J�c���[�Ƃ��ẴG���e�B�e�B�̕\����T�|�[�g���܂��B
- ���̃A�v���[�`��g���Ɖi���N���X�������A�}�b�s���O�t�@�C�������������ƂɂȂ�܂��B
+ 永続エンティティは、必ずしも実行時にPOJOクラスやJavaBeanオブジェクトで表現する必要はありません。
+ Hibernateは(実行時に <literal>Map</literal> の <literal>Map</literal> を使う)動的モデルと、
+ DOM4Jツリーとしてのエンティティの表現もサポートします。
+ このアプローチを使うと永続クラスを書かず、マッピングファイルだけを書くことになります。
</para>
<para>
- �f�t�H���g�ł́AHibernate�͒ʏ��POJO���[�h�œ��삵�܂��B
- <literal>default_entity_mode</literal> �ݒ�I�v�V������g���āA
- ����� <literal>SessionFactory</literal> �ɑ���f�t�H���g�̃G���e�B�e�B�\�����[�h��ݒ肷�邱�Ƃ��ł��܂�
- �i<xref linkend="configuration-optional-properties"/> �����������j�B
+ デフォルトでは、Hibernateは通常のPOJOモードで動作します。
+ <literal>default_entity_mode</literal> 設定オプションを使って、
+ 特定の <literal>SessionFactory</literal> に対するデフォルトのエンティティ表現モードを設定することができます
+ (<xref linkend="configuration-optional-properties"/> を見てください)。
</para>
<para>
- �ȉ��̗�ł� <literal>Map</literal> ��g�����\����Љ�܂��B
- �܂��}�b�s���O�t�@�C���ŁA�N���X���̑���Ɂi�܂��͂���ɉ����āj
- <literal>entity-name</literal> ���`���Ȃ���Ȃ�܂���F
+ 以下の例では <literal>Map</literal> を使った表現を紹介します。
+ まずマッピングファイルで、クラス名の代わりに(またはそれに加えて)
+ <literal>entity-name</literal> を定義しなければなりません:
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -386,14 +388,14 @@
</hibernate-mapping>]]></programlisting>
<para>
- �֘A���^�[�Q�b�g�̃N���X����g���Ē�`���Ă����Ƃ��Ă�A
- �֘A�̃^�[�Q�b�g�^��POJO�ł͂Ȃ����I�ȃG���e�B�e�B�ł�\��Ȃ����Ƃɒ��ӂ��Ă��������B
+ 関連がターゲットのクラス名を使って定義していたとしても、
+ 関連のターゲット型もPOJOではなく動的なエンティティでも構わないことに注意してください。
</para>
<para>
- <literal>SessionFactory</literal> �ɑ��ăf�t�H���g�̃G���e�B�e�B���[�h��
- <literal>dynamic-map</literal> �ɐݒ肵����A
- ���s���� <literal>Map</literal> �� <literal>Map</literal> ��g�����Ƃ��ł��܂��F
+ <literal>SessionFactory</literal> に対してデフォルトのエンティティモードを
+ <literal>dynamic-map</literal> に設定した後、
+ 実行時に <literal>Map</literal> の <literal>Map</literal> を使うことができます:
</para>
<programlisting><![CDATA[Session s = openSession();
@@ -419,15 +421,15 @@
s.close();]]></programlisting>
<para>
- ���I�ȃ}�b�s���O�̗��_�́A�G���e�B�e�B�N���X�̎�����K�v�Ƃ��Ȃ����߁A
- �v���g�^�C�s���O�ɗv����^�[���A���E���h�^�C���������Ƃ������Ƃł��B
- �������R���p�C�����̌^�`�F�b�N���Ȃ��̂ŁA���s���ɔ��ɑ����̗�O��������Ȃ���Ȃ�Ȃ��ł��傤�B
- Hibernate�}�b�s���O�̂������ŁA�f�[�^�x�[�X�X�L�[�}�͗e�Ղɐ��K���ł��A���S�ɂȂ�A
- ��œK�ȃh���C�����f���̎�����lj����邱�Ƃ��\�ɂȂ�܂��B
+ 動的なマッピングの利点は、エンティティクラスの実装を必要としないため、
+ プロトタイピングに要するターンアラウンドタイムが早いということです。
+ しかしコンパイル時の型チェックがないので、実行時に非常に多くの例外処理を扱わなければならないでしょう。
+ Hibernateマッピングのおかげで、データベーススキーマは容易に正規化でき、健全になり、
+ 後で適切なドメインモデルの実装を追加することが可能になります。
</para>
<para>
- �G���e�B�e�B�\�����[�h�� <literal>Session</literal> ���Ƃɐݒ肷�邱�Ƃ�\�ł��B
+ エンティティ表現モードは <literal>Session</literal> ごとに設定することも可能です。
</para>
<programlisting><![CDATA[Session dynamicSession = pojoSession.getSession(EntityMode.MAP);
@@ -445,18 +447,18 @@
<para>
- <literal>EntityMode</literal> ��g���� <literal>getSession()</literal>
- �̌Ăяo���� <literal>SessionFactory</literal> �ł͂Ȃ� <literal>Session</literal>
- API�ɂ��邱�Ƃɒ��ӂ��Ă��������B
- ���̕��@�ł́A�V���� <literal>Session</literal> �́A�x�[�X�ƂȂ�JDBC�R�l�N�V�����A
- �g�����U�N�V�����A���̑��̃R���e�L�X�g�����L���܂��B
- �����2�Ԗڂ� <literal>Session</literal> �ł� <literal>flush()</literal> �� <literal>close()</literal>
- ��ĂԕK�v���Ȃ��Ƃ������ƁA���̂��߃g�����U�N�V�����ƃR�l�N�V�����̊Ǘ���
- 1�Ԗڂ̍�ƒP��(Unit of Work)�ɔC���邱�Ƃ��ł���Ƃ������Ƃł��B
+ <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)に任せることができるということです。
</para>
<para>
- XML�\���̔\�͂ɂ��Ă̂���Ȃ���� <xref linkend="xml"/> �Ō�����܂��B
+ XML表現の能力についてのさらなる情報は <xref linkend="xml"/> で見つかります。
</para>
</sect1>
@@ -465,30 +467,30 @@
<title>Tuplizer</title>
<para>
- <literal>org.hibernate.tuple.Tuplizer</literal> �Ƃ��̃T�u�C���^�[�t�F�C�X�́A
- �\���� <literal>org.hibernate.EntityMode</literal> �𗘗p���āA
- �f�[�^�f�Ђ̂���\���̊Ǘ��ɐӔC�����܂��B
- �^����ꂽ�f�[�^�f�Ђ�f�[�^�\���Ƃ��čl����Ȃ�ATuplizer�͂��̂悤�ȃf�[�^�\����
- �ǂ̂悤�ɍ쐬���邩��m��A���̂悤�ȃf�[�^�\������ǂ̂悤�ɒl�𒊏o���A
- �������邩��m���Ă��܂��B
- �Ⴆ��POJO�G���e�B�e�B���[�h�ł́A�Ή�����Tuplizer�̓R���X�g���N�^��ʂ��āA
- POJO��ǂ̂悤�ɍ쐬���邩�A��`���ꂽ�v���p�e�B�A�N�Z�T��g���A
- POJO�v���p�e�B�ɂǂ̂悤�ɃA�N�Z�X���邩��m��܂��B
- Tuplizer�ɂ͓�̃n�C���x���̌^������܂��B
- �����́A<literal>org.hibernate.tuple.EntityTuplizer</literal> ��
- <literal>org.hibernate.tuple.ComponentTuplizer</literal> �C���^�[�t�F�C�X�ŕ\������܂��B
- <literal>EntityTuplizer</literal> �͏�ŏq�ׂ��悤�ȃG���e�B�e�B�Ɋւ���_��̊Ǘ��ɐӔC�����܂��B
- ����A<literal>ComponentTuplizer</literal> �̓R���|�[�l���g�Ɋւ���_��̊Ǘ��ɐӔC�����܂��B
+ <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> はコンポーネントに関する契約の管理に責任を持ちます。
</para>
<para>
- ���[�U�͓Ǝ���Tuplizer�ɍ����ւ��邱�Ƃ�\�ł��B
- �����炭dynamic-map entity-mode�̍ۂ� <literal>java.util.HashMap</literal> ��g���̂ł͂Ȃ��A
- <literal>java.util.Map</literal> �̎������K�v�ł��傤�B
- ������́A�����炭�f�t�H���g�̂�̂ł͂Ȃ��A�ʂ̃v���L�V�����헪�̒�`���K�v�ł��傤�B
- ���҂Ƃ�A�J�X�^����Tuplizer�������`���邱�ƂŒB������܂��B
- Tuplizer�̒�`�́A�Ǘ����悤�Ƃ���G���e�B�e�B��R���|�[�l���g�̃}�b�s���O�Ɍ��ѕt�����܂��B
- �ڋq�G���e�B�e�B�̗�ɖ߂�ƁF
+ ユーザは独自のTuplizerに差し替えることも可能です。
+ おそらくdynamic-map entity-modeの際に <literal>java.util.HashMap</literal> を使うのではなく、
+ <literal>java.util.Map</literal> の実装が必要でしょう。
+ もしくは、おそらくデフォルトのものではなく、別のプロキシ生成戦略の定義が必要でしょう。
+ 両者とも、カスタムのTuplizer実装を定義することで達成されます。
+ Tuplizerの定義は、管理しようとするエンティティやコンポーネントのマッピングに結び付けられます。
+ 顧客エンティティの例に戻ると:
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -531,7 +533,7 @@
</sect1>
<para>
- TODO: �v���p�e�B�ƃv���L�V�p�b�P�[�W�̃��[�U�g���t���[�����[�N�������邱��
+ TODO: プロパティとプロキシパッケージのユーザ拡張フレームワークを文書化すること
</para>
</chapter>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/preface.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/preface.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/preface.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,145 +1,144 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
-
+<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE preface PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<preface id="preface" revision="2">
- <title>�O����</title>
+ <title>前書き</title>
<para>
- �����̊�Ɗ��ɂ����āA�I�u�W�F�N�g�w���\�t�g�E�F�A�ƃ����[�V���i���f�[�^�x�[�X�Ɋւ���Ƃ�
- �ώG�Ŗc��Ȏ��Ԃ�K�v�Ƃ��܂��B
- Hibernate��Java���̃I�u�W�F�N�g/�����[�V���i���}�b�s���O�c�[���ł��B
- �I�u�W�F�N�g/�����[�V���i���}�b�s���O�iORM�j�Ƃ́A
- �I�u�W�F�N�g���f������SQL�x�[�X�X�L�[�}�̃����[�V���i���f�[�^���f���ւƁA
- �f�[�^�\����}�b�s���O����i�Ή��t����j�Z�p�̂��Ƃł��B
+ 今日の企業環境において、オブジェクト指向ソフトウェアとリレーショナルデータベースに関わる作業は
+ 煩雑で膨大な時間を必要とします。
+ HibernateはJava環境のオブジェクト/リレーショナルマッピングツールです。
+ オブジェクト/リレーショナルマッピング(ORM)とは、
+ オブジェクトモデルからSQLベーススキーマのリレーショナルデータモデルへと、
+ データ表現をマッピングする(対応付ける)技術のことです。
</para>
<para>
- Hibernate��Java�N���X����f�[�^�x�[�X�e�[�u���ցi������Java�f�[�^�^����SQL�f�[�^�^�ցj
- �̃}�b�s���O�������邾���ł͂Ȃ��A�f�[�^�̃N�G���ƕ����̎d�g�݂���܂��B
- ���̂�������SQL��JDBC��g�������Ƃł̃f�[�^�����ɔ�₳��Ă����J�����Ԃ�啝�ɍ팸�ł��܂��B
+ HibernateはJavaクラスからデータベーステーブルへ(そしてJavaデータ型からSQLデータ型へ)
+ のマッピングを処理するだけではなく、データのクエリと復元の仕組みも提供します。
+ このおかげでSQLとJDBCを使った手作業でのデータ処理に費やされていた開発時間を大幅に削減できます。
</para>
<para>
- Hibernate�̍ŏI�ڕW�́A�f�[�^�̉i�����Ɋւ���ʓI�ȃv���O���~���O��Ƃ�95������J���҂������邱�Ƃł��B
- Hibernate�̓r�W�l�X���W�b�N�̎����ɃX�g�A�h�v���V�[�W����g��
- �f�[�^���S�A�v���P�[�V�����ɑ��Ẵx�X�g�\�����[�V�����ł���ɗ��܂�܂���B
- �I�u�W�F�N�g�w���h���C�����f����Java�x�[�X�̒��ԑw�ł̃r�W�l�X���W�b�N�ɑ��čł��ɗ����܂��B
- ������Hibernate�̓x���_�ŗL��SQL�R�[�h��팸�܂��̓J�v�Z����������A
- �\�`������I�u�W�F�N�g�̃O���t�ւƃ��U���g�Z�b�g��ϊ�����Ȃǂ́A
- ��ʓI�ȃ^�X�N�ɂ�𗧂ł��傤�B
+ Hibernateの最終目標は、データの永続化に関わる一般的なプログラミング作業の95%から開発者を解放することです。
+ Hibernateはビジネスロジックの実装にストアドプロシージャを使う
+ データ中心アプリケーションに対してのベストソリューションであるに留まりません。
+ オブジェクト指向ドメインモデルとJavaベースの中間層でのビジネスロジックに対して最も役に立ちます。
+ しかしHibernateはベンダ固有のSQLコードを削減またはカプセル化したり、
+ 表形式からオブジェクトのグラフへとリザルトセットを変換するなどの、
+ 一般的なタスクにも役立つでしょう。
</para>
<para>
- Hibernate��I�u�W�F�N�g/�����[�V���i���}�b�s���O�A
- ����ɂ�Java�����߂Ă̕��́A�ȉ��̃X�e�b�v�ɏ]���Ă��������F
+ Hibernateやオブジェクト/リレーショナルマッピング、
+ さらにはJavaが初めての方は、以下のステップに従ってください:
</para>
<orderedlist>
<listitem>
<para>
- <xref linkend="tutorial"/> ��ǂ�ł��������B
- �i�K�I�ɉ����Ă����܂��B
- �`���[�g���A���̃\�[�X�R�[�h�̓f�B�X�g���r���[�V������
- <literal>doc/reference/tutorial</literal> �f�B���N�g���Ɋ܂܂�Ă��܂��B
+ <xref linkend="tutorial"/> を読んでください。
+ 段階的に解説していきます。
+ チュートリアルのソースコードはディストリビューションの
+ <literal>doc/reference/tutorial</literal> ディレクトリに含まれています。
</para>
</listitem>
<listitem>
<para>
- <xref linkend="architecture"/> ��ǂ�ŁAHibernate�����p�\�Ȋ��𗝉��Ă��������B
+ <xref linkend="architecture"/> を読んで、Hibernateが利用可能な環境を理解してください。
</para>
</listitem>
<listitem>
<para>
- Hibernate�f�B�X�g���r���[�V������ <literal>eg/</literal> �f�B���N�g�������������B
- �ȒP�ȃX�^���h�A���[���̃A�v���P�[�V����������܂��B
- JDBC�h���C�o�� <literal>lib/</literal> �f�B���N�g���ɃR�s�[���āA
- �����̃f�[�^�x�[�X�ɍ����������l��w�肷��悤�� <literal>etc/hibernate.properties</literal>
- ��ҏW���Ă��������B
- �f�B�X�g���r���[�V�����f�B���N�g������A�R�}���h�v�����v�g��
- <literal>ant eg</literal> �ƃ^�C�v���Ă��������iAnt��g���܂��j�B
- �܂�Windows���ł� <literal>build eg</literal> �ƃ^�C�v���Ă��������B
+ Hibernateディストリビューションの <literal>eg/</literal> ディレクトリを見てください。
+ 簡単なスタンドアローンのアプリケーションがあります。
+ JDBCドライバを <literal>lib/</literal> ディレクトリにコピーして、
+ 自分のデータベースに合う正しい値を指定するように <literal>etc/hibernate.properties</literal>
+ を編集してください。
+ ディストリビューションディレクトリから、コマンドプロンプトで
+ <literal>ant eg</literal> とタイプしてください(Antを使います)。
+ またWindows環境では <literal>build eg</literal> とタイプしてください。
</para>
</listitem>
<listitem>
<para>
- ���̃��t�@�����X�h�L�������g����̏�Ƃ��ė��p���Ă��������B
- �A�v���P�[�V�����v�ɂ��Ă̂���Ȃ����i�K�I�ȃ`���[�g���A����T���Ă���Ȃ�A
- <emphasis>Java Persistence with Hibernate</emphasis>�ihttp://www.manning.com/bauer2�j
- �������߂��܂��B
- �܂�http://caveatemptor.hibernate.org����
- Java Persistence with Hibernate�̗��̃A�v���P�[�V������_�E�����[�h�ł��܂��B
+ このリファレンスドキュメントを第一の情報源として利用してください。
+ アプリケーション設計についてのさらなる情報や段階的なチュートリアルを探しているなら、
+ <emphasis>Java Persistence with Hibernate</emphasis>(http://www.manning.com/bauer2)
+ をおすすめします。
+ またhttp://caveatemptor.hibernate.orgから
+ Java Persistence with Hibernateの例題のアプリケーションをダウンロードできます。
</para>
</listitem>
<listitem>
<para>
- FAQ��Hibernate�E�F�u�T�C�g�ɂ���܂��B
+ FAQはHibernateウェブサイトにあります。
</para>
</listitem>
<listitem>
<para>
- �T�[�h�p�[�e�B�̃f���A��A�`���[�g���A����Hibernate�E�F�u�T�C�g�Ƀ����N������܂��B
+ サードパーティのデモ、例、チュートリアルはHibernateウェブサイトにリンクがあります。
</para>
</listitem>
<listitem>
<para>
- Hibernate�E�F�u�T�C�g�̃R�~���j�e�B�G���A�́A�f�U�C���p�^�[���₳�܂��܂ȓ����\�����[�V����
- �iTomcat, JBoss AS, Struts, EJB, ���j�ɂ��Ă̂悢��ł��B
+ Hibernateウェブサイトのコミュニティエリアは、デザインパターンやさまざまな統合ソリューション
+ (Tomcat, JBoss AS, Struts, EJB, 等)についてのよい情報源です。
</para>
</listitem>
</orderedlist>
<para>
- ���₪�����Hibernate�E�F�u�T�C�g�̃��[�U�t�H�[�������p���Ă��������B
- �܂��o�O���|�[�g�ƃt�B�[�`�����N�G�X�g�̂���JIRA�ۑ�ǐՃV�X�e����p�ӂ��Ă��܂��B
- Hibernate�̊J���ɋ���������A�J���҃��[�����O���X�g�ɎQ�����Ă��������B
- ���̃h�L�������g���Ȃ��̍��̌��t�ɖ|�����ꍇ�́A
- �J���҃��[�����O���X�g�Ŏ������ɃR���^�N�g�����Ă��������B
+ 質問があればHibernateウェブサイトのユーザフォーラムを活用してください。
+ またバグレポートとフィーチャリクエストのためJIRA課題追跡システムを用意しています。
+ Hibernateの開発に興味があれば、開発者メーリングリストに参加してください。
+ このドキュメントをあなたの国の言葉に翻訳したい場合は、
+ 開発者メーリングリストで私たちにコンタクトを取ってください。
</para>
<para>
- ���p�J���̃T�|�[�g�A���i�̃T�|�[�g�AHibernate�̃g���[�j���O��JBoss Inc.�����Ă��܂�
- �ihttp://www.hibernate.org/SupportTraining/�����������j�B
- Hibernate��Professional Open Source�v���W�F�N�g�A
- ������JBoss Enterprise Middleware System�iJEMS�j�v���_�N�g�X�C�[�g�̃N���e�B�J���R���|�[�l���g�ł��B
+ 商用開発のサポート、製品のサポート、HibernateのトレーニングはJBoss Inc.が提供しています
+ (http://www.hibernate.org/SupportTraining/を見てください)。
+ HibernateはProfessional Open Sourceプロジェクト、
+ そしてJBoss Enterprise Middleware System(JEMS)プロダクトスイートのクリティカルコンポーネントです。
</para>
<!--
<sect1 id="preface-s1" revision="-1">
- <title>���{���ɂ���</title>
+ <title>日本語訳について</title>
<para id="preface-s1-p1" revision="-1">
- ���̓��{���Hibernate Reference Document�i�ȉ��A���{��Łj�́A
- Hibernate�v���W�F�N�g�̖|��v���Z�X�Ɋ�Â��č쐬����Ă��܂��B
- ���{��łȂ�тɌ�����LGPL���C�Z���X�ɏ����܂��B
+ この日本語版Hibernate Reference Document(以下、日本語版)は、
+ Hibernateプロジェクトの翻訳プロセスに基づいて作成されています。
+ 日本語版ならびに原文はLGPLライセンスに準じます。
</para>
<para id="preface-s1-p2" revision="-1">
- ���{��ł̗��p�ɂ���đ�O�҂���邠����s���v�ɑ��āA
- �����ҁA�|��҂Ȃ�тɂ��̑g�D�͈�̕ۏ��������˂܂��B
- ���{��ł͌���܂މ\�������邱�Ƃ�F��������ł����p���������B
- ��e�̐��m�ȈӖ���c�����邽�߂ɂ́A������ǂނ��Ƃ������߂��܂��B
- �܂��A������{��łɌ�������ꂽ�ꍇ�́A�|��҂ɂ��A������������K���ł��B
- ��������e�Ɋւ��Ă̂��₢���킹�ɂ͉������˂܂��̂ŁA���������������B
+ 日本語版の利用によって第三者が被るあらゆる不利益に対して、
+ 原著者、翻訳者ならびにその組織は一切の保証をいたしかねます。
+ 日本語版は誤りを含む可能性があることを認識した上でご利用ください。
+ 内容の正確な意味を把握するためには、原文を読むことをおすすめします。
+ また、もし日本語版に誤りを見つけられた場合は、翻訳者にご連絡いただければ幸いです。
+ ただし内容に関してのお問い合わせには応じかねますので、ご了承ください。
</para>
<sect2 id="preface-s1-1" revision="-1">
- <title>���{��Ŗ|��҂ɂ���</title>
+ <title>日本語版翻訳者について</title>
<para id="preface-s1-1-p4" revision="-1">
- ���{��Ńo�[�W����3.2 cr3�̖|��͊�����ЃG�N�T
- �i<ulink url="http://www.exa-corp.co.jp">�z�[���y�[�W�͂�����</ulink>�j
- �̈ȉ��̃����o�[�ōs���܂����B
- �{�ԗ́i6,18,19,21,22,23�͒S���j�A
- �L�˗T��i�O����,2,5,13,14,24,25�͒S���j�A
- ���s���l�i7,8,9,10�͒S���j�A
- �ߐ{�G�j�i12,16,17�͒S���j�A
- ��֒m���i1,3,11�͒S���j�A
- �ѓc�_�i�i4,15�͒S���j�A
- ���Ԍ���i20�͒S���j�A
- �X����i���r���[�S���j�B
- �Ȃ���̂��w�E�͖{�ԁA�L�˂܂ł��肢�������܂��B
+ 日本語版バージョン3.2 cr3の翻訳は株式会社エクサ
+ (<ulink url="http://www.exa-corp.co.jp">ホームページはこちら</ulink>)
+ の以下のメンバーで行いました。
+ 本間力(6,18,19,21,22,23章担当)、
+ 広戸裕介(前書き,2,5,13,14,24,25章担当)、
+ 武市正人(7,8,9,10章担当)、
+ 那須秀男(12,16,17章担当)、
+ 井関知文(1,3,11章担当)、
+ 飯田浩司(4,15章担当)、
+ 平間健一(20章担当)、
+ 森龍二(レビュー担当)。
+ なお誤訳等のご指摘は本間、広戸までお願いいたします。
<mediaobject>
<imageobject role="fo">
@@ -154,4 +153,4 @@
</sect2>
</sect1>
-->
- </preface>
\ No newline at end of file
+ </preface>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/query_criteria.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/query_criteria.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/query_criteria.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,18 +1,20 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="querycriteria">
- <title>Criteria�N�G��</title>
+ <title>Criteriaクエリ</title>
<para>
- Hibernate�ɂ́A�����I�Ŋg���\��criteria�N�G��API���p�ӂ���Ă��܂��B
+ Hibernateには、直感的で拡張可能なcriteriaクエリAPIが用意されています。
</para>
<sect1 id="querycriteria-creating">
- <title> <literal>Criteria</literal> �C���X�^���X�̍쐬</title>
+ <title> <literal>Criteria</literal> インスタンスの作成</title>
<para>
<literal>org.hibernate.Criteria</literal>
- �C���^�[�t�F�C�X�͓���̉i�����N���X�ɑ���N�G����\�����܂��B
- <literal>Session</literal> �� <literal>Criteria</literal> �C���X�^���X�̃t�@�N�g���ł��B
+ インターフェイスは特定の永続性クラスに対するクエリを表現します。
+ <literal>Session</literal> は <literal>Criteria</literal> インスタンスのファクトリです。
</para>
<programlisting><![CDATA[Criteria crit = sess.createCriteria(Cat.class);
@@ -22,14 +24,14 @@
</sect1>
<sect1 id="querycriteria-narrowing">
- <title>���U���g�Z�b�g�̍i����</title>
+ <title>リザルトセットの絞込み</title>
<para>
- <literal>org.hibernate.criterion.Criterion</literal> �C���^�[�t�F�C�X�̃C���X�^���X�́A
- �ʂ̃N�G���N���C�e���I���i�₢���킹�̔����j��\���܂��B
+ <literal>org.hibernate.criterion.Criterion</literal> インターフェイスのインスタンスは、
+ 個別のクエリクライテリオン(問い合わせの判定基準)を表します。
<literal>org.hibernate.criterion.Restrictions</literal>
- �N���X�́A����g�ݍ��݂� <literal>Criterion</literal>
- �^��擾���邽�߂̃t�@�N�g�����\�b�h�����Ă��܂��B
+ クラスは、ある組み込みの <literal>Criterion</literal>
+ 型を取得するためのファクトリメソッドを持っています。
</para>
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
@@ -38,7 +40,7 @@
.list();]]></programlisting>
<para>
- Restriction�i����j�́A�_���I�ɃO���[�v���ł��܂��B
+ Restriction(限定)は、論理的にグループ化できます。
</para>
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
@@ -60,8 +62,8 @@
.list();]]></programlisting>
<para>
- ���X����Criterion�^�i<literal>Restrictions</literal> �̃T�u�N���X�j
- �͂��Ȃ�͈̔͂ɋy�т܂����A���ɗL�p�Ȃ̂�SQL�ڎw��ł����̂ł��B
+ 元々あるCriterion型(<literal>Restrictions</literal> のサブクラス)
+ はかなりの範囲に及びますが、特に有用なのはSQLを直接指定できるものです。
</para>
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
@@ -69,15 +71,15 @@
.list();]]></programlisting>
<para>
- <literal>{alias}</literal> �Ƃ����v���[�X�z���_�́A
- �₢���킹����G���e�B�e�B�̍s�̕ʖ��ɂ���Ēu���������܂��B
+ <literal>{alias}</literal> というプレースホルダは、
+ 問い合わせを受けたエンティティの行の別名によって置き換えられます。
</para>
<para>
- criterion��ʂ̎�i�́A
- <literal>Property</literal> �C���X�^���X����擾���邱�Ƃł��B
- <literal>Property.forName()</literal> ��Ăяo���āA
- <literal>Property</literal> �C���X�^���X��쐬�ł��܂��B
+ criterionを得る別の手段は、
+ <literal>Property</literal> インスタンスから取得することです。
+ <literal>Property.forName()</literal> を呼び出して、
+ <literal>Property</literal> インスタンスを作成できます。
</para>
<programlisting><![CDATA[
@@ -95,11 +97,11 @@
</sect1>
<sect1 id="querycriteria-ordering">
- <title>���ʂ̐���</title>
+ <title>結果の整列</title>
<para>
<literal>org.hibernate.criterion.Order</literal>
- ��g���Č��ʂ���ёւ��邱�Ƃ��ł��܂��B
+ を使って結果を並び替えることができます。
</para>
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
@@ -119,11 +121,11 @@
</sect1>
<sect1 id="querycriteria-associations" revision="2">
- <title>�֘A</title>
+ <title>関連</title>
<para>
- <literal>createCriteria()</literal> ��g���A�֘A��i�r�Q�[�g���邱�ƂŁA
- �e�ՂɊW����G���e�B�e�B�ɐ����w��ł��܂��B
+ <literal>createCriteria()</literal> を使い、関連をナビゲートすることで、
+ 容易に関係するエンティティに制約を指定できます。
</para>
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
@@ -133,13 +135,13 @@
.list();]]></programlisting>
<para>
- 2�Ԗڂ� <literal>createCriteria()</literal> �́A<literal>kittens</literal>
- �R���N�V�����̗v�f��Q�Ƃ���V���� <literal>Criteria</literal>
- �C���X�^���X��Ԃ����Ƃɒ��ӂ��Ă��������B
+ 2番目の <literal>createCriteria()</literal> は、<literal>kittens</literal>
+ コレクションの要素を参照する新しい <literal>Criteria</literal>
+ インスタンスを返すことに注意してください。
</para>
<para>
- �ȉ��̂悤�ȕ��@��A�ɂ��L�p�ł��B
+ 以下のような方法も、状況により有用です。
</para>
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
@@ -149,17 +151,17 @@
.list();]]></programlisting>
<para>
- �i<literal>createAlias()</literal> �͐V����
- <literal>Criteria</literal> �C���X�^���X��쐬���܂���B�j
+ (<literal>createAlias()</literal> は新しい
+ <literal>Criteria</literal> インスタンスを作成しません。)
</para>
<para>
- �O��2�̃N�G���ɂ���ĕԂ���� <literal>Cat</literal>
- �C���X�^���X�ɂ���ĕێ������kittens�R���N�V�����́A
- criteria�ɂ���Ď��O�Ƀt�B���^�����O <emphasis>����Ȃ�</emphasis>
- ���Ƃɒ��ӂ��Ă��������B
- ���criteria�ɓK������kitten��擾�������Ȃ�A
- <literal>ResultTransformer</literal> ��g��Ȃ���Ȃ�܂���B
+ 前の2つのクエリによって返される <literal>Cat</literal>
+ インスタンスによって保持されるkittensコレクションは、
+ criteriaによって事前にフィルタリング <emphasis>されない</emphasis>
+ ことに注意してください。
+ もしcriteriaに適合するkittenを取得したいなら、
+ <literal>ResultTransformer</literal> を使わなければなりません。
</para>
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
@@ -177,11 +179,11 @@
</sect1>
<sect1 id="querycriteria-dynamicfetching" revision="1">
- <title>�֘A�̓��I�t�F�b�`</title>
+ <title>関連の動的フェッチ</title>
<para>
- <literal>setFetchMode()</literal> ��g���A
- ���s���Ɋ֘A�̕������@��w�肵�Ă�悢�ł��B
+ <literal>setFetchMode()</literal> を使い、
+ 実行時に関連の復元方法を指定してもよいです。
</para>
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
@@ -191,19 +193,19 @@
.list();]]></programlisting>
<para>
- ���̃N�G���͊O�������ɂ�� <literal>mate</literal> ��
- <literal>kittens</literal> �̗�����t�F�b�`���܂��B
- ��葽���̏��� <xref linkend="performance-fetching"/> ��Q�Ƃ��Ă��������B
+ このクエリは外部結合により <literal>mate</literal> と
+ <literal>kittens</literal> の両方をフェッチします。
+ より多くの情報は <xref linkend="performance-fetching"/> を参照してください。
</para>
</sect1>
<sect1 id="querycriteria-examples">
- <title>�N�G���̗�</title>
+ <title>クエリの例</title>
<para>
- <literal>org.hibernate.criterion.Example</literal> �N���X�́A
- �^����ꂽ�C���X�^���X����N�G���N���C�e���I����\�z�ł��܂��B
+ <literal>org.hibernate.criterion.Example</literal> クラスは、
+ 与えられたインスタンスからクエリクライテリオンを構築できます。
</para>
<programlisting><![CDATA[Cat cat = new Cat();
@@ -214,13 +216,13 @@
.list();]]></programlisting>
<para>
- �o�[�W�����v���p�e�B�A���ʎq�A�֘A�͖�������܂��B
- �f�t�H���g�ł�null�l�̃v���p�e�B�͏��O����܂��B
+ バージョンプロパティ、識別子、関連は無視されます。
+ デフォルトではnull値のプロパティは除外されます。
</para>
<para>
- �ǂ̂悤�� <literal>Example</literal> ��K�p���邩
- �������邱�Ƃ��ł��܂��B
+ どのように <literal>Example</literal> を適用するか
+ 調整することができます。
</para>
<programlisting><![CDATA[Example example = Example.create(cat)
@@ -233,7 +235,7 @@
.list();]]></programlisting>
<para>
- �֘A�I�u�W�F�N�g��criteria��w�肷�邽�߂ɁAExample��g�����Ƃ�\�ł��B
+ 関連オブジェクトにcriteriaを指定するために、Exampleを使うことも可能です。
</para>
<programlisting><![CDATA[List results = session.createCriteria(Cat.class)
@@ -245,12 +247,12 @@
</sect1>
<sect1 id="querycriteria-projection">
- <title>�ˉe�A�W��A�O���[�v��</title>
+ <title>射影、集約、グループ化</title>
<para>
- <literal>org.hibernate.criterion.Projections</literal> �N���X��
- <literal>Projection</literal> �C���X�^���X�̃t�@�N�g���ł��B
- <literal>setProjection()</literal> ��Ăяo�����ƂŁA
- �N�G���Ɏˉe��K�p���܂��B
+ <literal>org.hibernate.criterion.Projections</literal> クラスは
+ <literal>Projection</literal> インスタンスのファクトリです。
+ <literal>setProjection()</literal> を呼び出すことで、
+ クエリに射影を適用します。
</para>
<programlisting><![CDATA[List results = session.createCriteria(Cat.class)
@@ -268,14 +270,14 @@
.list();]]></programlisting>
<para>
- �K�v�ł����Ă�Acriteria�N�G���Ɂugroup by�v������K�v�͂���܂���B
- ������Projection�^�� <emphasis>�O���[�v���ˉe</emphasis> �Ƃ��Ē�`����A
- SQL�� <literal>group by</literal> �߂ɂ����܂��B
+ 必要であっても、criteriaクエリに「group by」を明示する必要はありません。
+ ある種のProjection型は <emphasis>グループ化射影</emphasis> として定義され、
+ SQLの <literal>group by</literal> 節にも現れます。
</para>
<para>
- �C�ӂŎˉe�ɕʖ���t�����邽�߁A�ˉe�����l��restriction��ordering�����Q�Ƃł��܂��B
- �ʖ������Q�̈قȂ���@�����܂��B
+ 任意で射影に別名を付けられるため、射影される値はrestrictionやordering内から参照できます。
+ 別名をつける2つの異なる方法を示します。
</para>
<programlisting><![CDATA[List results = session.createCriteria(Cat.class)
@@ -289,10 +291,10 @@
.list();]]></programlisting>
<para>
- <literal>alias()</literal> �� <literal>as()</literal> ���\�b�h�́A
- Projection�C���X�^���X��ʂ̖��O�� <literal>Projection</literal> �C���X�^���X��
- ���b�v���邾���ł��B
- �V���[�g�J�b�g�Ƃ��āA�ˉe��ˉe���X�g�ɒlj�����ۂɁA�ʖ�������܂��B
+ <literal>alias()</literal> と <literal>as()</literal> メソッドは、
+ Projectionインスタンスを別の名前の <literal>Projection</literal> インスタンスで
+ ラップするだけです。
+ ショートカットとして、射影を射影リストに追加する際に、別名をつけられます。
</para>
<programlisting><![CDATA[List results = session.createCriteria(Cat.class)
@@ -317,7 +319,7 @@
.list();]]></programlisting>
<para>
- �ˉe�̎��� <literal>Property.forName()</literal> ��g�p�ł��܂��B
+ 射影の式に <literal>Property.forName()</literal> も使用できます。
</para>
<programlisting><![CDATA[List results = session.createCriteria(Cat.class)
@@ -339,11 +341,11 @@
</sect1>
<sect1 id="querycriteria-detachedqueries">
- <title>�N�G������уT�u�N�G���̕���</title>
+ <title>クエリおよびサブクエリの分離</title>
<para>
- <literal>DetachedCriteria</literal> �N���X�ɂ��A
- �Z�b�V�����X�R�[�v�O�ɃN�G����쐬�ł��܂��B
- ��ŁA�C�ӂ� <literal>Session</literal> ��g���āA���s�ł��܂��B
+ <literal>DetachedCriteria</literal> クラスにより、
+ セッションスコープ外にクエリを作成できます。
+ 後で、任意の <literal>Session</literal> を使って、実行できます。
</para>
<programlisting><![CDATA[DetachedCriteria query = DetachedCriteria.forClass(Cat.class)
@@ -356,9 +358,9 @@
session.close();]]></programlisting>
<para>
- <literal>DetachedCriteria</literal> �́A�T�u�N�G����\�����邽�߂ɂ�g���܂��B
- �T�u�N�G����Criterion�C���X�^���X�́A
- <literal>Subqueries</literal> ������� <literal>Property</literal> ���瓾���܂��B
+ <literal>DetachedCriteria</literal> は、サブクエリを表現するためにも使えます。
+ サブクエリを伴うCriterionインスタンスは、
+ <literal>Subqueries</literal> もしくは <literal>Property</literal> から得られます。
</para>
<programlisting><![CDATA[DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)
@@ -374,7 +376,7 @@
.list();]]></programlisting>
<para>
- ���݊W������T�u�N�G���ł�����\�ł��B
+ 相互関係があるサブクエリでさえも可能です。
</para>
<programlisting><![CDATA[DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, "cat2")
@@ -391,23 +393,23 @@
could also be explained. -->
<sect1 id="query-criteria-naturalid">
- <title>���R���ʎq�ɂ��N�G��</title>
+ <title>自然識別子によるクエリ</title>
<para>
- criteria�N�G����܂ނ����Ă��̃N�G���ɂƂ��āA
- �N�G���L���b�V���͂��܂�������悭�Ȃ��ł��B
- �Ȃ��Ȃ�A�N�G���L���b�V�����p�ɂɖ����ɂȂ邽�߂ł��B
- �������Ȃ���A�L���b�V�����ɂ���A���S���Y����œK���ł���
- ���ʂȃN�G���̎�ނ��P����܂��B
- �X�V����Ȃ����R�L�[�ɂ�錟���ł��B
- �������̃A�v���P�[�V�����ł́A���̎�ނ̃N�G�����p�ɂɌ���܂��B
- ���̂悤�Ȏg�����̂��߂ɁAcriteria API�͓��ʂȑ����܂��B
+ criteriaクエリを含むたいていのクエリにとって、
+ クエリキャッシュはあまり効率がよくないです。
+ なぜなら、クエリキャッシュが頻繁に無効になるためです。
+ しかしながら、キャッシュを無効にするアルゴリズムを最適化できる
+ 特別なクエリの種類が1つあります。
+ 更新されない自然キーによる検索です。
+ いくつかのアプリケーションでは、この種類のクエリが頻繁に現れます。
+ このような使われ方のために、criteria APIは特別な対策を提供します。
</para>
<para>
- �ŏ��ɁA<literal><natural-id></literal> ��g���āA
- �G���e�B�e�B�̎��R�L�[��}�b�v���Ă��������B
- �����āA�L���b�V����L���ɂ��܂��B
+ 最初に、<literal><natural-id></literal> を使って、
+ エンティティの自然キーをマップしてください。
+ そして、二次キャッシュを有効にします。
</para>
<programlisting><![CDATA[<class name="User">
@@ -423,17 +425,17 @@
</class>]]></programlisting>
<para>
- ���ӁF <emphasis>�ύX�����</emphasis> ���R�L�[���G���e�B�e�B��
- ���̋@�\��g���̂́A�Ӑ}����Ă��Ȃ��g�����ł��B
+ 注意: <emphasis>変更される</emphasis> 自然キーを持つエンティティに
+ この機能を使うのは、意図されていない使い方です。
</para>
<para>
- ���ɁAHibernate�N�G���L���b�V����L���ɂ��܂��B
+ 次に、Hibernateクエリキャッシュを有効にします。
</para>
<para>
- ����ŁA<literal>Restrictions.naturalId()</literal> �ɂ��A
- �������I�ȃL���b�V���A���S���Y����g�p�ł��܂��B
+ これで、<literal>Restrictions.naturalId()</literal> により、
+ より効率的なキャッシュアルゴリズムを使用できます。
</para>
<programlisting><![CDATA[session.createCriteria(User.class)
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/query_hql.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/query_hql.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/query_hql.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,87 +1,89 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="queryhql">
<title>HQL: The Hibernate Query Language</title>
<para>
- Hibernate��SQL�ɔ��ɂ悭����(�Ӑ}�I�Ɏ�����)���͂Ȗ₢���킹���������Ă��܂��B
- ������SQL�Ɏ����\���ɘf�킳��Ȃ��ł��������BHQL�͊��S�ɃI�u�W�F�N�g�w���ł���A
- �p���A�|�����[�t�B�Y���A�֘A�Ƃ������T�O�𗝉��܂��B
+ HibernateはSQLに非常によく似た(意図的に似せた)強力な問い合わせ言語を備えています。
+ しかしSQLに似た構文に惑わされないでください。HQLは完全にオブジェクト指向であり、
+ 継承、ポリモーフィズム、関連といった概念を理解します。
</para>
<sect1 id="queryhql-casesensitivity">
- <title>�啶���Ə������̋��</title>
+ <title>大文字と小文字の区別</title>
<para>
- �N�G����Java�̃N���X���ƃv���p�e�B�������đ啶���A���������ʂ��܂���B
- �]���� <literal>SeLeCT</literal> ��
- <literal>sELEct</literal> �Ɠ����ŁA����
- <literal>SELECT</literal> �Ƃ�����ł���
- <literal>net.sf.hibernate.eg.FOO</literal> ��
- <literal>net.sf.hibernate.eg.Foo</literal> �Ƃ͈Ⴂ�A����
- <literal>foo.barSet</literal> ��
- <literal>foo.BARSET</literal> �Ƃ�Ⴂ�܂��B
+ クエリは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> とも違います。
</para>
<para>
- ���̃}�j���A���ł͏�������HQL�L�[���[�h��g�p���܂��B
- �啶���̃L�[���[�h�̃N�G���̕����ǂ݂₷���Ɗ����郆�[�U�[�����Ǝv���܂��B
- �ł����AJava�R�[�h��ɖ��ߍ��܂ꂽ�Ƃ��ɂ͌��Â炢�Ǝv���܂��B
+ このマニュアルでは小文字のHQLキーワードを使用します。
+ 大文字のキーワードのクエリの方が読みやすいと感じるユーザーもいると思います。
+ ですが、Javaコード内に埋め込まれたときには見づらいと思います。
</para>
</sect1>
<sect1 id="queryhql-from">
- <title>from��</title>
+ <title>from節</title>
<para>
- ����Ƃ�P����Hibernate�N�G���͎��̌`���ł��B
+ もっとも単純なHibernateクエリは次の形式です。
</para>
<programlisting><![CDATA[from eg.Cat]]></programlisting>
<para>
- ����͒P���Ɂ@<literal>eg.Cat</literal>�@�N���X�̃C���X�^���X���ׂĕԂ��܂��B
- �K������N���X����C������i�N���X�Ƀp�b�P�[�W����t����j�K�v�͂���܂���B
- �Ƃ����̂�A<literal>auto-import</literal> ���f�t�H���g�ɂȂ��Ă��邩��ł��B
- ���̂��߂قƂ�ǂ̏ꍇ�A���̂悤�ɏ��������ŏ\���ł��B
+ これは単純に <literal>eg.Cat</literal> クラスのインスタンスをすべて返します。
+ 必ずしもクラス名を修飾する(クラスにパッケージ名を付ける)必要はありません。
+ というのも、<literal>auto-import</literal> がデフォルトになっているからです。
+ そのためほとんどの場合、このように書くだけで十分です。
</para>
<programlisting><![CDATA[from Cat]]></programlisting>
<para>
- �قƂ�ǂ̏ꍇ�N�G���̂ق��̕����Ł@<literal>Cat</literal>�@��Q�Ƃ���̂ŁA�ʖ����蓖�Ă�K�v������ł��傤�B
+ ほとんどの場合クエリのほかの部分で <literal>Cat</literal> を参照するので、別名を割り当てる必要があるでしょう。
</para>
<programlisting><![CDATA[from Cat as cat]]></programlisting>
<para>
- ���̃N�G���ł� <literal>Cat</literal> �C���X�^���X�� <literal>cat</literal>
- �Ƃ����ʖ���t���Ă��܂��B
- ���̂��߁A��ł��̃N�G����ŁA���̕ʖ���g�����Ƃ��ł��܂��B
- <literal>as</literal> �L�[���[�h�̓I�v�V�����ł��B�܂肱�̂悤�ɏ������Ƃ�ł��܂��F
+ このクエリでは <literal>Cat</literal> インスタンスに <literal>cat</literal>
+ という別名を付けています。
+ そのため、後でこのクエリ内で、この別名を使うことができます。
+ <literal>as</literal> キーワードはオプションです。つまりこのように書くこともできます:
</para>
<programlisting><![CDATA[from Cat cat]]></programlisting>
<para>
- ���ρA���邢�̓N���X�����ɂ���đ����̃N���X���o�����邱�Ƃ����܂��B
+ 直積、あるいはクロス結合によって多数のクラスが出現することもあります。
</para>
<programlisting><![CDATA[from Formula, Parameter]]></programlisting>
<programlisting><![CDATA[from Formula as form, Parameter as param]]></programlisting>
<para>
- ���[�J���ϐ���Java�̃l�[�~���O��ƈ�v�����A
- �������ɏ�������g�����N�G���̕ʖ���t���邱�Ƃ͂����K���ł�(�Ⴆ�� <literal>domesticCat</literal> )�B
+ ローカル変数のJavaのネーミング基準と一致した、
+ 頭文字に小文字を使ったクエリの別名を付けることはいい習慣です(例えば <literal>domesticCat</literal> )。
</para>
</sect1>
<sect1 id="queryhql-joins" revision="2">
- <title>�֘A�ƌ���</title>
+ <title>関連と結合</title>
<para>
- �֘A����G���e�B�e�B���邢�͒l�R���N�V�����̗v�f�ɂ�A<literal>����</literal> ��g���ĕʖ����蓖�Ă邱�Ƃ��o���܂��B
+ 関連するエンティティあるいは値コレクションの要素にも、<literal>結合</literal> を使って別名を割り当てることが出来ます。
</para>
<programlisting><![CDATA[from Cat as cat
@@ -93,7 +95,7 @@
<programlisting><![CDATA[from Formula form full join form.parameter param]]></programlisting>
<para>
- �T�|�[�g���Ă��錋���̃^�C�v��ANSI SQL�Ɠ����ł��B
+ サポートしている結合のタイプはANSI SQLと同じです。
</para>
<itemizedlist spacing="compact">
@@ -114,13 +116,13 @@
</listitem>
<listitem>
<para>
- <literal>full join</literal> (�����Ă��̏ꍇ�g���Â炢)
+ <literal>full join</literal> (たいていの場合使いづらい)
</para>
</listitem>
</itemizedlist>
<para>
- <literal>inner join</literal>�A<literal>left outer join</literal>�A<literal>right outer join</literal>�ɂ͏ȗ��`��g�����Ƃ�ł��܂��B
+ <literal>inner join</literal>、<literal>left outer join</literal>、<literal>right outer join</literal>には省略形を使うこともできます。
</para>
<programlisting><![CDATA[from Cat as cat
@@ -128,7 +130,7 @@
left join cat.kittens as kitten]]></programlisting>
<para>
- HQL�� <literal>with</literal> �L�[���[�h��g���ƁA��������t�������邱�Ƃ��ł��܂��B
+ HQLの <literal>with</literal> キーワードを使うと、結合条件を付け加えることができます。
</para>
<programlisting><![CDATA[from Cat as cat
@@ -136,10 +138,10 @@
with kitten.bodyWeight > 10.0]]></programlisting>
<para>
- �����āA�u�t�F�b�`�v�����͊֘A��l�̃R���N�V������e�I�u�W�F�N�g�ƈꏏ��1�x��select��ŏ��������܂��B
- ����͓��ɃR���N�V�����̏ꍇ�ɗL�p�ł��B����͎�����A�֘A�ƃR���N�V�����ɑ���}�b�s���O��`�t�@�C���̊O��������lazy�������̒�`��㏑�����邱�ƂɂȂ�܂��B
+ 加えて、「フェッチ」結合は関連や値のコレクションを親オブジェクトと一緒に1度のselect句で初期化します。
+ これは特にコレクションの場合に有用です。これは実質上、関連とコレクションに対するマッピング定義ファイルの外部結合とlazy初期化の定義を上書きすることになります。
- <xref linkend="performance-fetching"/> �ɂ�葽���̏����܂��B
+ <xref linkend="performance-fetching"/> により多くの情報があります。
</para>
<programlisting><![CDATA[from Cat as cat
@@ -147,10 +149,10 @@
left join fetch cat.kittens]]></programlisting>
<para>
- �����ɂ��t�F�b�`�͊֘A����I�u�W�F�N�g�� <literal>where</literal> ��(�܂��͑��̂ǂ�Ȑ߂ł�)
- �Ŏg���Ă͂Ȃ�Ȃ��̂ŁA�ʏ�ʖ����蓖�Ă�K�v������܂���B�܂��֘A�I�u�W�F�N�g�͖₢���킹���ʂƂ���
- ���ڕԂ���܂���B����ɐe�I�u�W�F�N�g��ʂ��ăA�N�Z�X�ł��܂��B
- �R���N�V������ċA�I�Ɍ����t�F�b�`����ꍇ�̂݁A�ʖ����K�v�ɂȂ�܂��B
+ 結合によるフェッチは関連するオブジェクトが <literal>where</literal> 節(または他のどんな節でも)
+ で使われてはならないので、通常別名を割り当てる必要がありません。また関連オブジェクトは問い合わせ結果として
+ 直接返されません。代わりに親オブジェクトを通してアクセスできます。
+ コレクションを再帰的に結合フェッチする場合のみ、別名が必要になります。
</para>
<programlisting><![CDATA[from Cat as cat
@@ -159,28 +161,28 @@
left join fetch child.kittens]]></programlisting>
<para>
- <literal>fetch</literal> �\���� <literal>iterate()</literal>
- ��g�����N�G���Ăяo���Ŏg�p�ł��Ȃ����Ƃɒ��ӂ��Ă�������
- �i����� <literal>scroll()</literal> �͎g�p�ł��܂��j�B
+ <literal>fetch</literal> 構文は <literal>iterate()</literal>
+ を使ったクエリ呼び出しで使用できないことに注意してください
+ (一方で <literal>scroll()</literal> は使用できます)。
- �܂��A�����̑���͌��ʂ̍s�Ɋ�Â��Ă��邽�߁A
- <literal>fetch</literal> �� <literal>setMaxResults()</literal> �� <literal>setFirstResult()</literal>
- �ƈꏏ�Ɏg�p���ׂ��ł͂���܂���B
- �ʏ�eager�ȃR���N�V�����t�F�b�`����Əd�����o�Ă��܂����߁A���Ȃ������҂���悤�ȍs���ɂ͂Ȃ�Ȃ��̂ł��B
+ また、これらの操作は結果の行に基づいているため、
+ <literal>fetch</literal> は <literal>setMaxResults()</literal> や <literal>setFirstResult()</literal>
+ と一緒に使用すべきではありません。
+ 通常eagerなコレクションフェッチをすると重複が出てしまうため、あなたが期待するような行数にはならないのです。
- �����Ă܂� <literal>fetch</literal> �́A�A�h�z�b�N�� <literal>with</literal> ����
- �ꏏ�Ɏg�����Ƃ�ł��܂���B
- ��̃N�G���ŕ����̃R���N�V���������t�F�b�`���邱�Ƃɂ�蒼�ς�쐬�ł���̂ŁA���̏ꍇ���ӂ��Ă��������B
- �܂��A�����̃R���N�V�����ɑ��錋���t�F�b�`��bag�}�b�s���O�ɑ��ė\�����ʌ��ʂ����炷���Ƃ�����̂ŁA
- ���̏ꍇ�̃N�G���̍쐬�ɂ͒��ӂ��Ă��������B
- �Ō�� <literal>�S�O�������ɂ��t�F�b�`</literal> ��
- <literal>�E�O�������ɂ��t�F�b�`</literal> �͗L�p�ł͂Ȃ����Ƃɒ��ӂ��Ă��������B
+ そしてまた <literal>fetch</literal> は、アドホックな <literal>with</literal> 条件を
+ 一緒に使うこともできません。
+ 一つのクエリで複数のコレクションを結合フェッチすることにより直積を作成できるので、この場合注意してください。
+ また、複数のコレクションに対する結合フェッチはbagマッピングに対して予期せぬ結果をもたらすことがあるので、
+ この場合のクエリの作成には注意してください。
+ 最後に <literal>全外部結合によるフェッチ</literal> と
+ <literal>右外部結合によるフェッチ</literal> は有用ではないことに注意してください。
</para>
<para>
- ����v���p�e�B���x���̒x���t�F�b�`��g���ꍇ�i����I�Ƀo�C�g�R�[�h��������ꍇ�j�A
- <literal>fetch all properties</literal> ��g�����Ƃ�
- Hibernate�ɒx���v���p�e�B�𑬂₩�Ɂi�ŏ��̃N�G���Łj�t�F�b�`�����邱�Ƃ��ł��܂��B
+ もしプロパティレベルの遅延フェッチを使う場合(内部的にバイトコード処理をする場合)、
+ <literal>fetch all properties</literal> を使うことで
+ Hibernateに遅延プロパティを速やかに(最初のクエリで)フェッチさせることができます。
</para>
<programlisting><![CDATA[from Document fetch all properties order by name]]></programlisting>
@@ -189,32 +191,32 @@
</sect1>
<sect1 id="queryhql-joins-forms">
- <title>�����\���̌`��</title>
+ <title>結合構文の形式</title>
<para>
- HQL�͂Q�̊֘A�����`����T�|�[�g���܂��F<literal>�ÖٓI</literal> �� <literal>�����I</literal>�B
+ HQLは2つの関連結合形式をサポートします:<literal>暗黙的</literal> と <literal>明示的</literal>。
</para>
<para>
- ����܂ł̃Z�N�V�����ł����������g�����͂��ׂ� <literal>�����I��</literal> �`���ŁA
- from�߂Ŗ����I��join�L�[���[�h��g���Ă��܂��B
- ���̌`���������߂��܂��B
+ これまでのセクションでお見せした使い方はすべて <literal>明示的な</literal> 形式で、
+ from節で明示的にjoinキーワードを使っています。
+ この形式をおすすめします。
</para>
<para>
- <literal>�ÖٓI</literal> �t�H�[���́Ajoin�L�[���[�h��g���܂���B����ɁA�Q�Ƃ���֘A��
- �h�b�g�\�L��g���܂��B<literal>�ÖٓI</literal> �����́A���܂��܂�HQL�ɏo�Ă��܂��B
- <literal>�ÖٓI</literal> �����̌��ʂ́ASQL�X�e�[�g�����g�̓���������ʂł��B
+ <literal>暗黙的</literal> フォームは、joinキーワードを使いません。代わりに、参照する関連に
+ ドット表記を使います。<literal>暗黙的</literal> 結合は、さまざまなHQLに出てきます。
+ <literal>暗黙的</literal> 結合の結果は、SQLステートメントの内部結合結果です。
</para>
<programlisting><![CDATA[from Cat as cat where cat.mate.name like '%s%']]></programlisting>
</sect1>
<sect1 id="queryhql-select">
- <title>Select��</title>
+ <title>Select節</title>
<para>
- <literal>select</literal> �߂͈ȉ��̂悤�ɂǂ̃I�u�W�F�N�g�Ƒ�����N�G�����U���g�Z�b�g�ɕԂ�����I���܂��B:
+ <literal>select</literal> 節は以下のようにどのオブジェクトと属性をクエリリザルトセットに返すかを選択します。:
</para>
<programlisting><![CDATA[select mate
@@ -222,14 +224,14 @@
inner join cat.mate as mate]]></programlisting>
<para>
- ��L�̃N�G���͑��� <literal>Cat</literal> �� <literal>mate</literal> ��I���܂��B
- ���ۂɂ͎��̂悤�ɁA���Ȍ��ɕ\���ł��܂��B:
+ 上記のクエリは他の <literal>Cat</literal> の <literal>mate</literal> を選択します。
+ 実際には次のように、より簡潔に表現できます。:
</para>
<programlisting><![CDATA[select cat.mate from Cat cat]]></programlisting>
<para>
- �N�G���̓R���|�[�l���g�^�̃v���p�e�B��܂ށA������l�^�̃v���p�e�B��Ԃ��܂��B:
+ クエリはコンポーネント型のプロパティを含む、あらゆる値型のプロパティも返せます。:
</para>
<programlisting><![CDATA[select cat.name from DomesticCat cat
@@ -238,7 +240,7 @@
<programlisting><![CDATA[select cust.name.firstName from Customer as cust]]></programlisting>
<para>
- �N�G���͕����̃I�u�W�F�N�g��(�܂���)�v���p�e�B�� <literal>Object[]</literal> �^�̔z��Ƃ��ĕԂ��܂��B
+ クエリは複数のオブジェクトと(または)プロパティを <literal>Object[]</literal> 型の配列として返せます。
</para>
<programlisting><![CDATA[select mother, offspr, mate.name
@@ -247,7 +249,7 @@
left outer join mother.kittens as offspr]]></programlisting>
<para>
- ������� <literal>List</literal> �Ƃ��āA
+ もしくは <literal>List</literal> として、
</para>
<programlisting><![CDATA[select new list(mother, offspr, mate.name)
@@ -256,7 +258,7 @@
left outer join mother.kittens as offspr]]></programlisting>
<para>
- �܂��́A�^�C�v�Z�[�t��Java�I�u�W�F�N�g��Ԃ��܂��B
+ または、タイプセーフなJavaオブジェクトを返せます。
</para>
<programlisting><![CDATA[select new Family(mother, mate, offspr)
@@ -265,34 +267,34 @@
left join mother.kittens as offspr]]></programlisting>
<para>
- ���邢�� <literal>Family</literal> �N���X���K�ȃR���X�g���N�^�����Ă���Ƃ���Ȃ�A
+ あるいは <literal>Family</literal> クラスが適切なコンストラクタを持っているとするならば、
</para>
<para>
- select�߂� <literal>as</literal> ��g���ĕʖ�����邱�Ƃ�ł��܂��B
+ select節に <literal>as</literal> を使って別名をつけることもできます。
</para>
<programlisting><![CDATA[select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n
from Cat cat]]></programlisting>
<para>
- <literal>select new map</literal> �ƈꏏ�Ɏg���Ƃ��ɍł�𗧂��܂��F
+ <literal>select new map</literal> と一緒に使うときに最も役立ちます:
</para>
<programlisting><![CDATA[select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )
from Cat cat]]></programlisting>
<para>
- ���̃N�G���͕ʖ�����select�����l�� <literal>Map</literal> ��Ԃ��܂��B
+ このクエリは別名からselectした値へ <literal>Map</literal> を返します。
</para>
</sect1>
<sect1 id="queryhql-aggregation">
- <title>�W���</title>
+ <title>集約関数</title>
<para>
- HQL�̃N�G���̓v���p�e�B�̏W����̌��ʂ�Ԃ��܂��F
+ HQLのクエリはプロパティの集約関数の結果も返せます:
</para>
<programlisting><![CDATA[select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)
@@ -309,7 +311,7 @@
-->
<para>
- �T�|�[�g���Ă���W����͈ȉ��̂�̂ł��B
+ サポートしている集約関数は以下のものです。
</para>
<itemizedlist spacing="compact">
@@ -331,7 +333,7 @@
</itemizedlist>
<para>
- select�߂ɂ����ĎZ�p����A�A���Ə��F���ꂽSQL����g�����Ƃ��ł��܂��B
+ select節において算術操作、連結と承認されたSQL関数を使うことができます。
</para>
<programlisting><![CDATA[select cat.weight + sum(kitten.weight)
@@ -342,7 +344,7 @@
<programlisting><![CDATA[select firstName||' '||initial||' '||upper(lastName) from Person]]></programlisting>
<para>
- SQL�Ɠ����Ӗ����� <literal>distinct</literal> �� <literal>all</literal> �L�[���[�h��g�����Ƃ��ł��܂��B
+ SQLと同じ意味を持つ <literal>distinct</literal> と <literal>all</literal> キーワードを使うことができます。
</para>
<programlisting><![CDATA[select distinct cat.name from Cat cat
@@ -352,56 +354,56 @@
</sect1>
<sect1 id="queryhql-polymorphism">
- <title>�|�����[�t�B�b�N�ȃN�G��</title>
+ <title>ポリモーフィックなクエリ</title>
<para>
- ���̂悤�ȃN�G���F
+ 次のようなクエリ:
</para>
<programlisting><![CDATA[from Cat as cat]]></programlisting>
<para>
- <literal>Cat</literal> �C���X�^���X�����ł͂Ȃ��A<literal>DomesticCat</literal>
- �̂悤�ȃT�u�N���X��Ԃ���܂��BHibernate�N�G���� <emphasis>�ǂ��</emphasis>
- Java�N���X��C���^�[�t�F�C�X�� <literal>from</literal> �߂ɓ���邱�Ƃ��ł��܂��B
- �N�G���͂��̃N���X��g�������A������̓C���^�[�t�F�C�X����������S�Ẳi���N���X��Ԃ��܂��B
- ���̃N�G���͉i���I�u�W�F�N�g���ׂĕԂ��܂�:
+ <literal>Cat</literal> インスタンスだけではなく、<literal>DomesticCat</literal>
+ のようなサブクラスも返されます。Hibernateクエリは <emphasis>どんな</emphasis>
+ Javaクラスやインターフェイスも <literal>from</literal> 節に入れることができます。
+ クエリはそのクラスを拡張した、もしくはインターフェイスを実装した全ての永続クラスを返します。
+ 次のクエリは永続オブジェクトをすべて返します:
</para>
<programlisting><![CDATA[from java.lang.Object o]]></programlisting>
<para>
- <literal>Named</literal> �C���^�[�t�F�C�X�͗l�X�ȉi���N���X�ɂ���Ď�������܂��B:
+ <literal>Named</literal> インターフェイスは様々な永続クラスによって実装されます。:
</para>
<programlisting><![CDATA[from Named n, Named m where n.name = m.name]]></programlisting>
<para>
- �Ō�̓�̃N�G���́A��ȏ��SQL <literal>SELECT</literal> ��v�����Ă��邱�Ƃɒ��ӂ��Ă��������B
- ���̂��Ƃ� <literal>order by</literal> �߂����U���g�Z�b�g�S�̂𐳊m�ɂ͐��Ȃ����Ƃ�Ӗ����܂�
- (����ɂ���́A<literal>Query.scroll()</literal> ��g�p���Ă����̃N�G����ĂԂ��Ƃ��ł��Ȃ����Ƃ�Ӗ����܂��B)�B
+ 最後の二つのクエリは、二つ以上のSQL <literal>SELECT</literal> を要求していることに注意してください。
+ このことは <literal>order by</literal> 節がリザルトセット全体を正確には整列しないことを意味します
+ (さらにそれは、<literal>Query.scroll()</literal> を使用してこれらのクエリを呼ぶことができないことを意味します。)。
</para>
</sect1>
<sect1 id="queryhql-where">
- <title>where��</title>
+ <title>where節</title>
<para>
- <literal>where</literal> �߂͕Ԃ����C���X�^���X�̃��X�g��i�邱�Ƃ��ł��܂��B
- ����ʖ����Ȃ��ꍇ�A���O�Ńv���p�e�B��Q�Ƃ��܂��B
+ <literal>where</literal> 節は返されるインスタンスのリストを絞ることができます。
+ もし別名がない場合、名前でプロパティを参照します。
</para>
<programlisting><![CDATA[from Cat where name='Fritz']]></programlisting>
<para>
- ����ʖ�������ꍇ�A�C������g���Ă��������B
+ もし別名がある場合、修飾名を使ってください。
</para>
<programlisting><![CDATA[from Cat as cat where cat.name='Fritz']]></programlisting>
<para>
- ���O��'Fritz'�Ƃ��� <literal>Cat</literal> �̃C���X�^���X��Ԃ��܂��B
+ 名前が'Fritz'という <literal>Cat</literal> のインスタンスを返します。
</para>
<programlisting><![CDATA[select foo
@@ -409,28 +411,28 @@
where foo.startDate = bar.date]]></programlisting>
<para>
- ���HQL�́A<literal>Foo</literal> �� <literal>startDate</literal> �v���p�e�B�Ɠ�����
- <literal>date</literal> �v���p�e�B������ <literal>bar</literal> �C���X�^���X�����݂���A
- ���ׂĂ� <literal>Foo</literal> �C���X�^���X��Ԃ��܂��B
- �R���p�E���h�p�X���i�Ⴆ�ucat.mate.name�v�j�� <literal>where</literal> �߂���ɋ��͂ɂ��܂��B���ځF
+ 上のHQLは、<literal>Foo</literal> の <literal>startDate</literal> プロパティと等しい
+ <literal>date</literal> プロパティを持った <literal>bar</literal> インスタンスが存在する、
+ すべての <literal>Foo</literal> インスタンスを返します。
+ コンパウンドパス式(例えば「cat.mate.name」)は <literal>where</literal> 節を非常に強力にします。注目:
</para>
<programlisting><![CDATA[from Cat cat where cat.mate.name is not null]]></programlisting>
<para>
- ���̃N�G���̓e�[�u�������i��������j����SQL�N�G���ɕϊ�����܂��B
- ���̑���Ɉȉ��̂悤�ɏ����ƁA
+ このクエリはテーブル結合(内部結合)を持つSQLクエリに変換されます。
+ その代わりに以下のように書くと、
</para>
<programlisting><![CDATA[from Foo foo
where foo.bar.baz.customer.address.city is not null]]></programlisting>
<para>
- �����̃N�G����L�q������N�G�����4�̃e�[�u��������K�v�Ƃ���SQL�N�G���ɕϊ�����܂��B
+ もし上のクエリを記述したらクエリ内に4つのテーブル結合を必要とするSQLクエリに変換されます。
</para>
<para>
- <literal>=</literal> ���Z�q�͈ȉ��̂悤�ɁA�v���p�e�B�����łȂ��C���X�^���X���r���邽�߂ɂ�g���܂��B�F
+ <literal>=</literal> 演算子は以下のように、プロパティだけでなくインスタンスを比較するためにも使われます。:
</para>
<programlisting><![CDATA[from Cat cat, Cat rival where cat.mate = rival.mate]]></programlisting>
@@ -440,8 +442,8 @@
where cat.mate = mate]]></programlisting>
<para>
- <literal>id</literal> (������)�͓��ʂȃv���p�e�B�ł���A
- �I�u�W�F�N�g�̃��j�[�N�Ȏ��ʎq��Q�Ƃ��邽�߂Ɏg�p�ł��܂��B(����ɁA���̃v���p�e�B����g�p�ł��܂��B)
+ <literal>id</literal> (小文字)は特別なプロパティであり、
+ オブジェクトのユニークな識別子を参照するために使用できます。(さらに、そのプロパティ名を使用できます。)
</para>
<programlisting><![CDATA[from Cat as cat where cat.id = 123
@@ -449,12 +451,12 @@
from Cat as cat where cat.mate.id = 69]]></programlisting>
<para>
- 2�Ԗڂ̃N�G���͌����I�ł��B�e�[�u���������K�v����܂���I
+ 2番目のクエリは効率的です。テーブル結合が必要ありません!
</para>
<para>
- �܂��������ʎq�̃v���p�e�B��g�p�ł��܂��B������ <literal>Person</literal> ��
- <literal>country</literal> �� <literal>medicareNumber</literal> ����Ȃ镡�����ʎq���Ɖ��肵�܂��B
+ また複合識別子のプロパティも使用できます。ここで <literal>Person</literal> が
+ <literal>country</literal> と <literal>medicareNumber</literal> からなる複合識別子を持つと仮定します。
</para>
<programlisting><![CDATA[from bank.Person person
@@ -466,70 +468,70 @@
and account.owner.id.medicareNumber = 123456]]></programlisting>
<para>
- �����x�����܂����A2�Ԗڂ̃N�G���ɂ̓e�[�u���������K�v����܂���B
+ もう一度言いますが、2番目のクエリにはテーブル結合が必要ありません。
</para>
<para>
- ���l�� <literal>class</literal> �͓��ʂȃv���p�e�B�ł���A
- �|�����[�t�B�b�N�ȉi�����ɂ�����C���X�^���X��discriminator�l�ɃA�N�Z�X���܂��B
- where�߂ɖ��ߍ��܂ꂽJava�̃N���X���͂���discriminator�l�ɕϊ�����܂��B
+ 同様に <literal>class</literal> は特別なプロパティであり、
+ ポリモーフィックな永続化におけるインスタンスのdiscriminator値にアクセスします。
+ where節に埋め込まれたJavaのクラス名はそのdiscriminator値に変換されます。
</para>
<programlisting><![CDATA[from Cat cat where cat.class = DomesticCat]]></programlisting>
<para>
- �܂��R���|�[�l���g�╡�����[�U�^(�܂����̃R���|�[�l���g�̃R���|�[�l���g�Ȃ�)�̃v���p�e�B��w��ł��܂��B
+ またコンポーネントや複合ユーザ型(またそのコンポーネントのコンポーネントなど)のプロパティも指定できます。
- �����������āi�R���|�[�l���g�̃v���p�e�B�ł͂Ȃ��j�R���|�[�l���g�^�̃v���p�e�B�ŏI������p�X����g��Ȃ��ł��������B
- �Ⴆ��� <literal>store.owner</literal> �� <literal>address</literal>
- �R���|�[�l���g���G���e�B�e�B�Ȃ�Έȉ��̂悤�Ȍ��ʂƂȂ�܂��B
+ しかし決して(コンポーネントのプロパティではなく)コンポーネント型のプロパティで終了するパス式を使わないでください。
+ 例えばもし <literal>store.owner</literal> が <literal>address</literal>
+ コンポーネントを持つエンティティならば以下のような結果となります。
</para>
<programlisting><![CDATA[store.owner.address.city // okay
store.owner.address // error!]]></programlisting>
<para>
- "any"�^�͓��ʂȃv���p�e�B�ł��� <literal>id</literal> �� <literal>class</literal> �����A
- �ȉ��̕��@�Ō�����\�����邱�Ƃ�\�ɂ��܂�(<literal>AuditLog.item</literal> ��
- <literal><any></literal> �Ń}�b�s���O���ꂽ�v���p�e�B�ł�)�B
+ "any"型は特別なプロパティである <literal>id</literal> と <literal>class</literal> を持ち、
+ 以下の方法で結合を表現することを可能にします(<literal>AuditLog.item</literal> は
+ <literal><any></literal> でマッピングされたプロパティです)。
</para>
<programlisting><![CDATA[from AuditLog log, Payment payment
where log.item.class = 'Payment' and log.item.id = payment.id]]></programlisting>
<para>
- <literal>log.item.class</literal> �� <literal>payment.class</literal> ��
- ��L�̃N�G�����őS���قȂ�f�[�^�x�[�X�J�����̒l��Q�Ƃ���Ƃ������Ƃɒ��ӂ��Ă��������B
+ <literal>log.item.class</literal> と <literal>payment.class</literal> が
+ 上記のクエリ中で全く異なるデータベースカラムの値を参照するということに注意してください。
</para>
</sect1>
<sect1 id="queryhql-expressions">
- <title>Expressions ��</title>
+ <title>Expressions 式</title>
<para>
- SQL�� <literal>where</literal> �߂ŋL�q���邱�Ƃ��o���鎮�̂قƂ�ǂ�HQL�ł�L�q�ł��܂��B:
+ SQLの <literal>where</literal> 節で記述することが出来る式のほとんどをHQLでも記述できます。:
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- �Z�p���Z�q�F<literal>+, -, *, /</literal>
+ 算術演算子:<literal>+, -, *, /</literal>
</para>
</listitem>
<listitem>
<para>
- 2����r���Z�q�F<literal>=, >=, <=, <>, !=, like</literal>
+ 2項比較演算子:<literal>=, >=, <=, <>, !=, like</literal>
</para>
</listitem>
<listitem>
<para>
- �_�����Z�q�F<literal>and, or, not</literal>
+ 論理演算子:<literal>and, or, not</literal>
</para>
</listitem>
<listitem>
<para>
- �O���[�v������\�����ʁF<literal>( )</literal>
+ グループ分けを表す括弧:<literal>( )</literal>
</para>
</listitem>
<listitem>
@@ -547,13 +549,13 @@
</listitem>
<listitem>
<para>
- "�V���v��"��case <literal>case ... when ... then ... else ... end</literal>�A
- "�T���I"��case <literal>case when ... then ... else ... end</literal>
+ "シンプル"なcase <literal>case ... when ... then ... else ... end</literal>、
+ "探索的"なcase <literal>case when ... then ... else ... end</literal>
</para>
</listitem>
<listitem>
<para>
- �X�g�����O�̘A�� <literal>...||...</literal> �܂��� <literal>concat(...,...)</literal>
+ ストリングの連結 <literal>...||...</literal> または <literal>concat(...,...)</literal>
</para>
</listitem>
<listitem>
@@ -571,74 +573,74 @@
</listitem>
<listitem>
<para>
- EJB-QL 3.0�Œ�`����Ă�����≉�Z�q: <literal>substring(), trim(),
+ EJB-QL 3.0で定義されている関数や演算子: <literal>substring(), trim(),
lower(), upper(), length(), locate(), abs(), sqrt(), bit_length()</literal>
</para>
</listitem>
<listitem>
<para>
- <literal>coalesce()</literal> �� <literal>nullif()</literal>
+ <literal>coalesce()</literal> と <literal>nullif()</literal>
</para>
</listitem>
<listitem>
<para>
- �����⎞�Ԃ̒l��String�ɃR���o�[�g���� <literal>str()</literal>�j
+ 数字や時間の値をStringにコンバートする <literal>str()</literal>)
</para>
</listitem>
<listitem>
<para>
- 2�Ԗڂ̈�����Hibernate�^�̖��O�ł��� <literal>cast(... as ...)</literal> ��
- <literal>extract(... from ...)</literal>�B
- �������g�p����f�[�^�x�[�X��ANSI <literal>cast()</literal> �� <literal>extract()</literal>
- ��T�|�[�g����ꍇ�Ɍ���܂��B
+ 2番目の引数がHibernate型の名前である <literal>cast(... as ...)</literal> と
+ <literal>extract(... from ...)</literal>。
+ ただし使用するデータベースがANSI <literal>cast()</literal> と <literal>extract()</literal>
+ をサポートする場合に限ります。
</para>
</listitem>
<listitem>
<para>
- ���������C���f�b�N�X�t���̃R���N�V�����̕ʖ��ɓK�p�����HQL��
- <literal>index()</literal> ���B
+ 結合したインデックス付きのコレクションの別名に適用されるHQLの
+ <literal>index()</literal> 関数。
</para>
</listitem>
<listitem>
<para>
- �R���N�V�����l�̃p�X������HQL���F <literal>size(), minelement(), maxelement(),
- minindex(), maxindex()</literal> �B
- <literal>some, all, exists, any, in</literal> ��g���ďC�����邱�Ƃ��ł�����ʂ�
- <literal>elements()</literal> �� <literal>indices</literal> ���ƈꏏ�Ɏg���܂��B
+ コレクション値のパス式を取るHQL関数: <literal>size(), minelement(), maxelement(),
+ minindex(), maxindex()</literal> 。
+ <literal>some, all, exists, any, in</literal> を使って修飾することができる特別な
+ <literal>elements()</literal> と <literal>indices</literal> 関数と一緒に使います。
</para>
</listitem>
<listitem>
<para>
<literal>sign()</literal>, <literal>trunc()</literal>, <literal>rtrim()</literal>, <literal>sin()</literal>
- �̂悤�ȃf�[�^�x�[�X���T�|�[�g����SQL�X�J�����B
+ のようなデータベースがサポートするSQLスカラ関数。
</para>
</listitem>
<listitem>
<para>
- JDBC�X�^�C���̈ʒu�p�����[�^ <literal>?</literal>
+ JDBCスタイルの位置パラメータ <literal>?</literal>
</para>
</listitem>
<listitem>
<para>
- ���O�t���p�����[�^: <literal>:name</literal>, <literal>:start_date</literal>, <literal>:x1</literal>
+ 名前付きパラメータ: <literal>:name</literal>, <literal>:start_date</literal>, <literal>:x1</literal>
</para>
</listitem>
<listitem>
<para>
- SQL���e�����F<literal>'foo'</literal>, <literal>69</literal>, <literal>6.66E+2</literal>,
+ SQLリテラル:<literal>'foo'</literal>, <literal>69</literal>, <literal>6.66E+2</literal>,
<literal>'1970-01-01 10:00:01.0'</literal>
</para>
</listitem>
<listitem>
<para>
- Java�� <literal>public static final</literal> �萔�F<literal>eg.Color.TABBY</literal>
+ Javaの <literal>public static final</literal> 定数:<literal>eg.Color.TABBY</literal>
</para>
</listitem>
</itemizedlist>
<para>
- <literal>in</literal> �� <literal>between</literal> �͈ȉ��̂悤�Ɏg�p�ł��܂��B:
+ <literal>in</literal> と <literal>between</literal> は以下のように使用できます。:
</para>
<programlisting><![CDATA[from DomesticCat cat where cat.name between 'A' and 'B']]></programlisting>
@@ -646,7 +648,7 @@
<programlisting><![CDATA[from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )]]></programlisting>
<para>
- �܂��A�ے�`�ŋL�q���邱�Ƃ�ł��܂��B
+ また、否定形で記述することもできます。
</para>
<programlisting><![CDATA[from DomesticCat cat where cat.name not between 'A' and 'B']]></programlisting>
@@ -654,25 +656,25 @@
<programlisting><![CDATA[from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )]]></programlisting>
<para>
- ���l�� <literal>is null</literal> �� <literal>is not null</literal> ��null�l��e�X�g���邽�߂Ɏg�p�ł��܂��B
+ 同様に <literal>is null</literal> や <literal>is not null</literal> はnull値をテストするために使用できます。
</para>
<para>
- Hibernate�ݒ�t�@�C����HQL query substitutions���`����Aboolean�l���̒��ŊȒP�Ɏg�p�ł��܁B�F
+ Hibernate設定ファイルでHQL query substitutionsを定義すれば、boolean値を式の中で簡単に使用できま。:
</para>
<programlisting><![CDATA[<property name="hibernate.query.substitutions">true 1, false 0</property>]]></programlisting>
<para>
- �������邱�Ƃʼn��L��HQL��SQL�ɕϊ�����Ƃ��� <literal>true</literal> ,
- <literal>false</literal> �L�[���[�h�� <literal>1</literal> , <literal>0</literal> �ɒu���������܂��B:
+ こうすることで下記のHQLをSQLに変換するときに <literal>true</literal> ,
+ <literal>false</literal> キーワードは <literal>1</literal> , <literal>0</literal> に置き換えられます。:
</para>
<programlisting><![CDATA[from Cat cat where cat.alive = true]]></programlisting>
<para>
- ���ʂȃv���p�e�B <literal>size</literal>�A�܂��͓��ʂȊ� <literal>size()</literal>
- ��g���ăR���N�V�����̃T�C�Y��e�X�g�ł��܂��B:
+ 特別なプロパティ <literal>size</literal>、または特別な関数 <literal>size()</literal>
+ を使ってコレクションのサイズをテストできます。:
</para>
<programlisting><![CDATA[from Cat cat where cat.kittens.size > 0]]></programlisting>
@@ -680,10 +682,10 @@
<programlisting><![CDATA[from Cat cat where size(cat.kittens) > 0]]></programlisting>
<para>
- �C���f�b�N�X�t���̃R���N�V�����ł́A<literal>minindex</literal> �� <literal>maxindex</literal>
- ����g���āA�C���f�b�N�X�̍ŏ��l�ƍő�l��Q�Ƃł��܂��B
- ���l�ɁA<literal>minelement</literal> �� <literal>maxelement</literal> ��g���āA
- ��{�^�̃R���N�V�����v�f�̍ŏ��l�ƍő�l��Q�Ƃł��܂��B
+ インデックス付きのコレクションでは、<literal>minindex</literal> と <literal>maxindex</literal>
+ 関数を使って、インデックスの最小値と最大値を参照できます。
+ 同様に、<literal>minelement</literal> と <literal>maxelement</literal> を使って、
+ 基本型のコレクション要素の最小値と最大値を参照できます。
</para>
<programlisting><![CDATA[from Calendar cal where maxelement(cal.holidays) > current_date]]></programlisting>
@@ -693,9 +695,9 @@
<programlisting><![CDATA[from Order order where minelement(order.items) > 10000]]></programlisting>
<para>
- �R���N�V�����̗v�f��C���f�b�N�X�̃Z�b�g�i<literal>elements</literal> �� <literal>indices</literal>
- ���j�A�܂��͕��₢���킹�i��q�j�̌��ʂ�����Ƃ��́A
- SQL�� <literal>any, some, all, exists, in</literal> ���T�|�[�g����܂��B
+ コレクションの要素やインデックスのセット(<literal>elements</literal> と <literal>indices</literal>
+ 関数)、または副問い合わせ(後述)の結果が受け取れるときは、
+ SQL関数 <literal>any, some, all, exists, in</literal> がサポートされます。
</para>
<programlisting><![CDATA[select mother from Cat as mother, Cat as kit
@@ -713,12 +715,12 @@
<para>
<literal>size</literal>, <literal>elements</literal>, <literal>indices</literal>,
<literal>minindex</literal>, <literal>maxindex</literal>, <literal>minelement</literal>,
- <literal>maxelement</literal> ��Hibernate3��where�߂����ŗ��p�\�ł��邱�Ƃɒ��ӂ��Ă��������B
+ <literal>maxelement</literal> はHibernate3のwhere節だけで利用可能であることに注意してください。
</para>
<para>
- �C���f�b�N�X�t���̃R���N�V�����iarrays, lists, maps�j�̗v�f�́A
- �C���f�b�N�X�ŎQ�Ƃł��܂��iwhere�ߓ�ł̂݁j�B
+ インデックス付きのコレクション(arrays, lists, maps)の要素は、
+ インデックスで参照できます(where節内でのみ)。
</para>
<programlisting><![CDATA[from Order order where order.items[0].id = 1234]]></programlisting>
@@ -734,14 +736,14 @@
where order.items[ maxindex(order.items) ] = item and order.id = 11]]></programlisting>
<para>
- <literal>[]</literal> ����̎��́A�Z�p���ł�\���܂���B
+ <literal>[]</literal> 内部の式は、算術式でも構いません。
</para>
<programlisting><![CDATA[select item from Item item, Order order
where order.items[ size(order.items) - 1 ] = item]]></programlisting>
<para>
- ��Α��֘A��l�̃R���N�V�����̗v�f�ɑ��ẮAHQL�͑g�ݍ��݂� <literal>index()</literal> ����p�ӂ��Ă��܂��B
+ 一対多関連や値のコレクションの要素に対しては、HQLは組み込みの <literal>index()</literal> 関数も用意しています。
</para>
<programlisting><![CDATA[select item, index(item) from Order order
@@ -749,13 +751,13 @@
where index(item) < 5]]></programlisting>
<para>
- �x�[�X�ƂȂ�f�[�^�x�[�X���T�|�[�g���Ă���X�J���[SQL�����g�p�ł��܂�
+ ベースとなるデータベースがサポートしているスカラーSQL関数が使用できます
</para>
<programlisting><![CDATA[from DomesticCat cat where upper(cat.name) like 'FRI%']]></programlisting>
<para>
- ����܂��S�Ă𗝉��Ă��Ȃ��Ȃ�A���̃N�G����SQL�łǂꂾ�������A�ǂ݂Â炭�o���邩�l���Ă��������B:
+ もしまだ全てを理解していないなら、下のクエリをSQLでどれだけ長く、読みづらく出来るか考えてください。:
</para>
@@ -768,7 +770,7 @@
and prod = all elements(cust.currentOrder.lineItems)]]></programlisting>
<para>
- <emphasis>�q���g:</emphasis> �Ⴆ���̂悤�ɏo���܂��B
+ <emphasis>ヒント:</emphasis> 例えばこのように出来ます。
</para>
<programlisting><![CDATA[SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order
@@ -792,25 +794,25 @@
</sect1>
<sect1 id="queryhql-ordering">
- <title>order by��</title>
+ <title>order by節</title>
<para>
- �N�G�����Ԃ�list�́A�Ԃ����N���X��R���|�[�l���g�̔C�ӂ̑����ɂ���ĕ��בւ����܂��B�F
+ クエリが返すlistは、返されるクラスやコンポーネントの任意の属性によって並べ替えられます。:
</para>
<programlisting><![CDATA[from DomesticCat cat
order by cat.name asc, cat.weight desc, cat.birthdate]]></programlisting>
<para>
- �I�v�V������ <literal>asc</literal> �� <literal>desc</literal> �͂��ꂼ�ꏸ�����~���̐�������܂��B
+ オプションの <literal>asc</literal> と <literal>desc</literal> はそれぞれ昇順か降順の整列を示します。
</para>
</sect1>
<sect1 id="queryhql-grouping">
- <title>group by��</title>
+ <title>group by節</title>
<para>
- �W��l��Ԃ��N�G���́A�Ԃ����N���X��R���|�[�l���g�̔C�ӂ̃v���p�e�B�ɂ���ăO���[�v���ł��܂��B:
+ 集約値を返すクエリは、返されるクラスやコンポーネントの任意のプロパティによってグループ化できます。:
</para>
<programlisting><![CDATA[select cat.color, sum(cat.weight), count(cat)
@@ -822,7 +824,7 @@
group by foo.id]]></programlisting>
<para>
- <literal>having</literal> �߂�g���܂��B
+ <literal>having</literal> 節も使えます。
</para>
<programlisting><![CDATA[select cat.color, sum(cat.weight), count(cat)
@@ -831,9 +833,9 @@
having cat.color in (eg.Color.TABBY, eg.Color.BLACK)]]></programlisting>
<para>
- ����g�p����f�[�^�x�[�X���T�|�[�g���Ă���Ȃ�A
- <literal>having</literal> �� <literal>order by</literal> �߂�SQL���ƏW������g���܂�
- �i�Ⴆ��MySQL�ɂ͂���܂���j�B
+ もし使用するデータベースがサポートしているなら、
+ <literal>having</literal> と <literal>order by</literal> 節でSQL関数と集約関数が使えます
+ (例えばMySQLにはありません)。
</para>
<programlisting><![CDATA[select cat
@@ -844,19 +846,19 @@
order by count(kitten) asc, sum(kitten.weight) desc]]></programlisting>
<para>
- <literal>group by</literal> �߂� <literal>order by</literal> �߂�
- �Z�p����܂ނ��Ƃ��ł��Ȃ����Ƃɒ��ӂ��Ă��������B
+ <literal>group by</literal> 節や <literal>order by</literal> 節に
+ 算術式を含むことができないことに注意してください。
</para>
</sect1>
<sect1 id="queryhql-subqueries" revision="2">
- <title>���₢���킹</title>
+ <title>副問い合わせ</title>
<para>
- �T�u�Z���N�g��T�|�[�g����f�[�^�x�[�X�̂��߁AHibernate�͕��₢���킹��T�|�[�g���Ă��܂��B
- ���₢���킹�͊��ʂň͂܂Ȃ���Ȃ�܂���iSQL�̏W����Ăяo���ɂ�鎖�������ł��j�B
- �֘A���₢���킹(�O���N�G�����̕ʖ���Q�Ƃ��镛�₢���킹�̂���)����������܂��B
+ サブセレクトをサポートするデータベースのため、Hibernateは副問い合わせをサポートしています。
+ 副問い合わせは括弧で囲まなければなりません(SQLの集約関数呼び出しによる事が多いです)。
+ 関連副問い合わせ(外部クエリ中の別名を参照する副問い合わせのこと)さえ許可されます。
</para>
<programlisting><![CDATA[from Cat as fatcat
@@ -883,11 +885,11 @@
from Cat as cat]]></programlisting>
<para>
- HQL���₢���킹�́Aselect�܂���where�߂����Ŏg���邱�Ƃɒ��ӂ��Ă��������B
+ HQL副問い合わせは、selectまたはwhere節だけで使われることに注意してください。
</para>
<para>
- select���X�g�ɕ����̎������₢���킹�ɂ́A�^�v����g�����Ƃ��ł��܂��B
+ selectリストに複数の式を持つ副問い合わせには、タプルを使うことができます。
</para>
<programlisting><![CDATA[from Cat as cat
@@ -896,43 +898,43 @@
)]]></programlisting>
<para>
- �������̃f�[�^�x�[�X�iOracle��HSQL�ɂ͂���܂���j�ł́A
- ���̃R���e�L�X�g�ł�^�v�����g���܂��B
- �Ⴆ�A�N�G���R���|�[�l���g�╡�����[�U�^�ɂ����Ăł��B
+ いくつかのデータベース(OracleやHSQLにはありません)では、
+ 他のコンテキストでもタプルが使えます。
+ 例えば、クエリコンポーネントや複合ユーザ型においてです。
</para>
<programlisting><![CDATA[from Person where name = ('Gavin', 'A', 'King')]]></programlisting>
<para>
- �����ł����A���璷�ȃN�G���ł��F
+ 同等ですが、より冗長なクエリです:
</para>
<programlisting><![CDATA[from Person where name.first = 'Gavin' and name.initial = 'A' and name.last = 'King')]]></programlisting>
<para>
- ���̂悤�Ȃ��Ƃ������Ȃ��̂ɂ�2�̗��R������܂��F
- 1�ڂ́A�f�[�^�x�[�X�v���b�g�t�H�[���ԂŊ��S�Ȍ݊����͂Ȃ�����ł��B
- 2�ڂ́A�N�G�����}�b�s���O�h�L�������g�̃v���p�e�B�̏����Ɉˑ����邩��ł��B
+ このようなことをしたくないのには2つの理由があります:
+ 1つ目は、データベースプラットフォーム間で完全な互換性はないからです。
+ 2つ目は、クエリがマッピングドキュメントのプロパティの順序に依存するからです。
</para>
</sect1>
<sect1 id="queryhql-examples">
- <title>HQL�̗�</title>
+ <title>HQLの例</title>
<para>
- Hibernate�N�G���͔��ɋ��͂ŕ��G�ɂł��܂��B���ہA�N�G������̈З͂�Hibernate�̎�v�ȃZ�[���X�|�C���g�̈�ł��B
- �����ɍŋ߂̃v���W�F�N�g�Ŏg�p�����N�G���Ɣ��ɂ悭�����Ⴊ����܂��B
- �قƂ�ǂ̃N�G���͂����̗���ȒP�ɋL�q�ł��邱�Ƃɒ��ӂ��Ă�������!
+ Hibernateクエリは非常に強力で複雑にできます。実際、クエリ言語の威力はHibernateの主要なセールスポイントの一つです。
+ ここに最近のプロジェクトで使用したクエリと非常によく似た例があります。
+ ほとんどのクエリはこれらの例より簡単に記述できることに注意してください!
</para>
<para>
- �ȉ��̃N�G���͓���̌ڋq�Ɨ^����ꂽ�ŏ��̍��v�l�ɑ��関���������̒���ID�A
- ���i�̐��A�����̍��v���v�l�Ő��ĕԂ��܂��B
- ���i���肷��ہA���݂̃J�^���O��g���܂��B���ʂƂ��ĕԂ����SQL�N�G����
+ 以下のクエリは特定の顧客と与えられた最小の合計値に対する未払い注文の注文ID、
+ 商品の数、注文の合計を合計値で整列して返します。
+ 価格を決定する際、現在のカタログを使います。結果として返されるSQLクエリは
<literal>ORDER</literal>, <literal>ORDER_LINE</literal>, <literal>PRODUCT</literal>,
- <literal>CATALOG</literal> ����� <literal>PRICE</literal> �e�[�u���ɑ�4�̓��������
- (�֘A���Ȃ�)���₢���킹�����܂��B
+ <literal>CATALOG</literal> および <literal>PRICE</literal> テーブルに対し4つの内部結合と
+ (関連しない)副問い合わせを持ちます。
</para>
<programlisting><![CDATA[select order.id, sum(price.amount), count(item)
@@ -955,7 +957,7 @@
order by sum(price.amount) desc]]></programlisting>
<para>
- ���ċ���ȃN�G���Ȃ̂ł��傤! ���i���͕��₢���킹���܂�g���܂���B���������Ď��̃N�G���͎��ۂɂ͈ȉ��̂悤�ɂȂ�܂��B:
+ 何て巨大なクエリなのでしょう! 普段私は副問い合わせをあまり使いません。したがって私のクエリは実際には以下のようになります。:
</para>
<programlisting><![CDATA[select order.id, sum(price.amount), count(item)
@@ -973,10 +975,10 @@
order by sum(price.amount) desc]]></programlisting>
<para>
- ���̃N�G���͊e�X�e�[�^�X�̎x�������𐔂��܂��B���������ׂĂ̎x���������݂̗��p�҂ɂ��
- �ŐV�̃X�e�[�^�X�ύX�ł��� <literal>AWAITING_APPROVAL</literal> �ł���ꍇ�����܂��B
- ���̃N�G����2�̓�������� <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal> �����
- <literal>PAYMENT_STATUS_CHANGE</literal> �e�[�u���ɑ���֘A���₢���킹�������SQL�N�G���ɕϊ�����܂��B
+ 次のクエリは各ステータスの支払い数を数えます。ただしすべての支払いが現在の利用者による
+ 最新のステータス変更である <literal>AWAITING_APPROVAL</literal> である場合を除きます。
+ このクエリは2つの内部結合と <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal> および
+ <literal>PAYMENT_STATUS_CHANGE</literal> テーブルに対する関連副問い合わせを備えたSQLクエリに変換されます。
</para>
<programlisting><![CDATA[select count(payment), status.name
@@ -996,8 +998,8 @@
order by status.sortOrder]]></programlisting>
<para>
- �������set�̑����list�Ƃ��� <literal>statusChanges</literal> �R���N�V������
- �}�b�s���O�����Ȃ�A�͂邩�ɊȒP�ɃN�G����L�q�ł���ł��傤�B
+ もし私がsetの代わりにlistとして <literal>statusChanges</literal> コレクションを
+ マッピングしたならば、はるかに簡単にクエリを記述できるでしょう。
</para>
<programlisting><![CDATA[select count(payment), status.name
@@ -1009,13 +1011,13 @@
order by status.sortOrder]]></programlisting>
<para>
- ���̃N�G���͌��݂̃��[�U����������g�D�ɑ���A�J�E���g����і������̎x������
- ���ׂĕԂ�MS SQL Server
- �� <literal>isNull()</literal> ����g�p���Ă��܂��B
- ���̃N�G����3�̓��������1�̊O������ �A
- ������ <literal>ACCOUNT</literal>, <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal>,
- <literal>ACCOUNT_TYPE</literal>, <literal>ORGANIZATION</literal> �����
- <literal>ORG_USER</literal> �e�[�u���ɑ��镛�₢���킹������SQL�ɕϊ�����܂��B
+ 次のクエリは現在のユーザが所属する組織に対するアカウントおよび未払いの支払いを
+ すべて返す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に変換されます。
</para>
<programlisting><![CDATA[select account, payment
@@ -1026,7 +1028,7 @@
order by account.type.sortOrder, account.accountNumber, payment.dueDate]]></programlisting>
<para>
- �������̃f�[�^�x�[�X�ɂ��ẮA(�֘A������ꂽ)���₢���킹�̎g�p�����K�v������ł��傤�B
+ いくつかのデータベースについては、(関連させられた)副問い合わせの使用を避ける必要があるでしょう。
</para>
<programlisting><![CDATA[select account, payment
@@ -1040,12 +1042,12 @@
</sect1>
<sect1 id="queryhql-bulk" revision="2">
- <title>��ʂ�UPDATE��DELETE</title>
+ <title>大量のUPDATEとDELETE</title>
<para>
- HQL�͍��� <literal>update</literal> �� <literal>delete</literal>�A<literal>insert ... select ...</literal>
- �X�e�[�g�����g��HQL�ɓ���邱�Ƃ�T�|�[�g���Ă��܂��B
- <xref linkend="batch-direct"/> �ɏڍׂ�����܂��B
+ HQLは今は <literal>update</literal> と <literal>delete</literal>、<literal>insert ... select ...</literal>
+ ステートメントをHQLに入れることをサポートしています。
+ <xref linkend="batch-direct"/> に詳細があります。
</para>
</sect1>
@@ -1053,13 +1055,13 @@
<title>Tips & Tricks</title>
<para>
- ���ۂɌ��ʂ�Ԃ��Ȃ��Ă�N�G���̌��ʐ��𐔂��邱�Ƃ��ł��܂��B:
+ 実際に結果を返さなくてもクエリの結果数を数えることができます。:
</para>
<programlisting><![CDATA[( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue()]]></programlisting>
<para>
- �R���N�V�����̃T�C�Y�ɂ�茋�ʂ���בւ��邽�߂ɂ͈ȉ��̃N�G����g�p���܂��B:
+ コレクションのサイズにより結果を並べ替えるためには以下のクエリを使用します。:
</para>
<programlisting><![CDATA[select usr.id, usr.name
@@ -1069,13 +1071,13 @@
order by count(msg)]]></programlisting>
<para>
- �g�p���Ă���f�[�^�x�[�X���T�u�Z���N�g��T�|�[�g����ꍇ�A�N�G����where�߂ŃT�C�Y�ɂ��I�����ݒ�ł��܂�:
+ 使用しているデータベースがサブセレクトをサポートする場合、クエリのwhere節でサイズによる選択条件を設定できます:
</para>
<programlisting><![CDATA[from User usr where size(usr.messages) >= 1]]></programlisting>
<para>
- �g�p���Ă���f�[�^�x�[�X���T�u�Z���N�g��T�|�[�g���Ȃ��ꍇ�́A���̃N�G����g�p���Ă�������:
+ 使用しているデータベースがサブセレクトをサポートしない場合は、次のクエリを使用してください:
</para>
<programlisting><![CDATA[select usr.id, usr.name
@@ -1085,8 +1087,8 @@
having count(msg) >= 1]]></programlisting>
<para>
- ����������Ă��邹���ŏ�̉��@��message�̌�����
- �[���� <literal>User</literal> ��Ԃ����Ƃ��ł��Ȃ��Ȃ�A�ȉ��̌`�����g���܂��B
+ 内部結合をしているせいで上の解決法がmessageの件数が
+ ゼロの <literal>User</literal> を返すことができないならば、以下の形式が使えます。
</para>
<programlisting><![CDATA[select usr.id, usr.name
@@ -1096,7 +1098,7 @@
having count(msg) = 0]]></programlisting>
<para>
- JavaBean�̃v���p�e�B�́A���O�t���̃N�G���p�����[�^�Ɍ��т��邱�Ƃ��o���܂��B�F
+ JavaBeanのプロパティは、名前付きのクエリパラメータに結びつけることが出来ます。:
</para>
<programlisting><![CDATA[Query q = s.createQuery("from foo Foo as foo where foo.name=:name and foo.size=:size");
@@ -1104,7 +1106,7 @@
List foos = q.list();]]></programlisting>
<para>
- �R���N�V�����̓t�B���^�t�� <literal>Query</literal> �C���^�[�t�F�C�X��g�p���邱�ƂŃy�[�W����邱�Ƃ��ł��܂��B:
+ コレクションはフィルタ付き <literal>Query</literal> インターフェイスを使用することでページをつけることができます。:
</para>
<programlisting><![CDATA[Query q = s.createFilter( collection, "" ); // the trivial filter
@@ -1113,14 +1115,14 @@
List page = q.list();]]></programlisting>
<para>
- �R���N�V�����̗v�f�̓N�G���t�B���^��g���āA���בւ���O���[�v�������o���܂��B:
+ コレクションの要素はクエリフィルタを使って、並べ替えやグループ分けが出来ます。:
</para>
<programlisting><![CDATA[Collection orderedCollection = s.filter( collection, "order by this.amount" );
Collection counts = s.filter( collection, "select this.type, count(this) group by this.type" );]]></programlisting>
<para>
- �R���N�V���������������ɃR���N�V�����̃T�C�Y�邱�Ƃ��ł��܂��B:
+ コレクションを初期化せずにコレクションのサイズを得ることができます。:
</para>
<programlisting><![CDATA[( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue();]]></programlisting>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/query_sql.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/query_sql.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/query_sql.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,41 +1,43 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="querysql" revision="2">
- <title>�l�C�e�B�uSQL</title>
+ <title>ネイティブSQL</title>
- <para>�f�[�^�x�[�X�̃l�C�e�B�uSQL������g���ăN�G����\�����邱�Ƃ�ł��܂��B
- �N�G���q���g��Oracle�� <literal>CONNECT</literal> �L�[���[�h�̂悤�ɁA
- �f�[�^�x�[�X�Ǝ��̋@�\�𗘗p�������Ƃ��Ɏg���܂��B
- SQL/JDBC�ڎg�p���Ă���A�v���P�[�V��������Hibernate�ւ̈ڍs��e�Ղɂ��Ă��܂��B</para>
+ <para>データベースのネイティブSQL方言を使ってクエリを表現することもできます。
+ クエリヒントやOracleの <literal>CONNECT</literal> キーワードのように、
+ データベース独自の機能を利用したいときに使えます。
+ SQL/JDBCを直接使用しているアプリケーションからHibernateへの移行も容易にしています。</para>
- <para>Hibernate3�ł́A�����A�X�V�A�폜�A�ǂݍ��ݏ����̂悤�Ȃ��ׂĂ�
- SQL�i�X�g�A�h�v���V�[�W����܂ށj��菑���ł��܂��B</para>
+ <para>Hibernate3では、生成、更新、削除、読み込み処理のようなすべての
+ SQL(ストアドプロシージャを含む)を手書きできます。</para>
<sect1 id="querysql-creating" revision="4">
- <title><literal>SQLQuery</literal> �̎g�p</title>
+ <title><literal>SQLQuery</literal> の使用</title>
- <para>�l�C�e�B�u��SQL�N�G���̎��s�� <literal>SQLQuery</literal>
- �C���^�[�t�F�C�X��ʂ��Đ��䂵�܂��B
- <literal>SQLQuery</literal> �C���^�[�t�F�C�X��
- <literal>Session.createSQLQuery()</literal> ��Ăяo���Ď擾���܂��B
- ����API��g���Ė₢���킹������@��ȉ��Ő�����܂��B</para>
+ <para>ネイティブなSQLクエリの実行は <literal>SQLQuery</literal>
+ インターフェイスを通して制御します。
+ <literal>SQLQuery</literal> インターフェイスは
+ <literal>Session.createSQLQuery()</literal> を呼び出して取得します。
+ このAPIを使って問い合わせする方法を以下で説明します。</para>
<sect2>
- <title>�X�J���[�̃N�G��</title>
+ <title>スカラーのクエリ</title>
- <para>�ł��{�I��SQL�N�G���̓X�J���[�i�l�j�̃��X�g�邱�Ƃł��B</para>
+ <para>最も基本的なSQLクエリはスカラー(値)のリストを得ることです。</para>
<programlisting><![CDATA[sess.createSQLQuery("SELECT * FROM CATS").list();
sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").list();
]]></programlisting>
- <para>�����͂ǂ����ACATS�e�[�u���̊e�J�����̃X�J���[�l��܂�
- Object�z��iObject[]�j�̃��X�g��Ԃ��܂��B
- �Ԃ��X�J���[�l�̎��ۂ̏��Ԃƌ^�𐄒肷�邽�߂ɁA
- Hibernate��ResultSetMetadata��g�p���܂��B</para>
+ <para>これらはどちらも、CATSテーブルの各カラムのスカラー値を含む
+ Object配列(Object[])のリストを返します。
+ 返すスカラー値の実際の順番と型を推定するために、
+ HibernateはResultSetMetadataを使用します。</para>
- <para><literal>ResultSetMetadata</literal> ��g�p����I�[�o�[�w�b�h����邽�߁A
- ������͒P�ɉ����Ԃ���邩���m�ɂ��邽�߁A<literal>addScalar()</literal>
- ��g���܂��B</para>
+ <para><literal>ResultSetMetadata</literal> を使用するオーバーヘッドを避けるため、
+ もしくは単に何が返されるか明確にするため、<literal>addScalar()</literal>
+ を使えます。</para>
<programlisting><![CDATA[sess.createSQLQuery("SELECT * FROM CATS")
.addScalar("ID", Hibernate.LONG)
@@ -43,28 +45,28 @@
.addScalar("BIRTHDATE", Hibernate.DATE)
]]></programlisting>
- <para>���̃N�G���Ŏw�肳��Ă����̂��L�Ɏ����܂��B</para>
+ <para>このクエリで指定されているものを下記に示します。</para>
<itemizedlist>
<listitem>
- <para>SQL�N�G��������</para>
+ <para>SQLクエリ文字列</para>
</listitem>
<listitem>
- <para>�Ԃ����J�����ƌ^</para>
+ <para>返されるカラムと型</para>
</listitem>
</itemizedlist>
- <para>����͂܂�Object�z���Ԃ��܂����A
- <literal>ResultSetMetdata</literal> ��g�p���܂���B
- �������A���̑���Ɋ�b�ɂ��郊�U���g�Z�b�g����
- ID�ANAME�ABIRTHDATE �J�������ꂼ��
- Long�AString�AShort �Ƃ��Ė����I�Ɏ擾���܂��B
- ����͂R�̃J������Ԃ��݂̂ł��邱�Ƃ�Ӗ����܂��B
- ���Ƃ��A�N�G���� <literal>*</literal> ��g�p���A
- �����R��葽���̃J������Ԃ���Ƃ��Ă�ł��B</para>
+ <para>これはまだObject配列を返しますが、
+ <literal>ResultSetMetdata</literal> を使用しません。
+ ただし、その代わりに基礎にあるリザルトセットから
+ ID、NAME、BIRTHDATE カラムをそれぞれ
+ Long、String、Short として明示的に取得します。
+ これは3つのカラムを返すのみであることも意味します。
+ たとえ、クエリが <literal>*</literal> を使用し、
+ 列挙した3つより多くのカラムを返せるとしてもです。</para>
- <para>�X�J���[�̌^����Ȃ����Ƃ�ł��܂��B</para>
+ <para>スカラーの型情報を省くこともできます。</para>
<programlisting><![CDATA[sess.createSQLQuery("SELECT * FROM CATS")
.addScalar("ID", Hibernate.LONG)
@@ -73,68 +75,68 @@
]]></programlisting>
<para>
- ����͖{���I�ɑO�Ɠ����N�G���ł����A�A
- NAME �� BIRTHDATE �̌^���߂邽�߂� <literal>ResultSetMetaData</literal>
- ��g�p���܂��B����AID �̌^�͖����I�Ɏw�肳��Ă��܂��B
+ これは本質的に前と同じクエリですが、、
+ NAME と BIRTHDATE の型を決めるために <literal>ResultSetMetaData</literal>
+ を使用します。一方、ID の型は明示的に指定されています。
</para>
<para>
- ResultSetMetaData ����Ԃ���� java.sql.Types �� Hibernate �̌^��
- �}�b�s���O���邱�Ƃ́ADialect �����䂵�܂��B
- �������ꂽ�^���}�b�s���O����Ă��Ȃ����A���ʂ̌^�����҂�����̂ƈقȂ�ꍇ�A
- Dialect �� <literal>registerHibernateType</literal> ��Ăяo���A
- �J�X�^�}�C�Y�ł��܂��B
+ ResultSetMetaData から返される java.sql.Types を Hibernate の型に
+ マッピングすることは、Dialect が制御します。
+ 明示された型がマッピングされていないか、結果の型が期待したものと異なる場合、
+ Dialect の <literal>registerHibernateType</literal> を呼び出し、
+ カスタマイズできます。
</para>
</sect2>
<sect2>
- <title>�G���e�B�e�B�̃N�G��</title>
+ <title>エンティティのクエリ</title>
- <para>�����܂ł̃N�G���́A���ׂăX�J���[�l��Ԃ���̂ł����B
- ��{�I�ɁA���U���g�Z�b�g����u�����H�v�̒l��Ԃ��܂��B
- �ȍ~�ł́A<literal>addEntity()</literal> �ɂ��A�l�C�e�B�uSQL�N�G������
- �G���e�B�e�B�I�u�W�F�N�g��擾������@�����܂��B</para>
+ <para>ここまでのクエリは、すべてスカラー値を返すものでした。
+ 基本的に、リザルトセットから「未加工」の値を返します。
+ 以降では、<literal>addEntity()</literal> により、ネイティブSQLクエリから
+ エンティティオブジェクトを取得する方法を示します。</para>
<programlisting><![CDATA[sess.createSQLQuery("SELECT * FROM CATS").addEntity(Cat.class);
sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").addEntity(Cat.class);
]]></programlisting>
- <para>���̃N�G���Ŏw�肳��Ă����̂��L�Ɏ����܂��B</para>
+ <para>このクエリで指定されているものを下記に示します。</para>
<itemizedlist>
<listitem>
- <para>SQL�N�G��������</para>
+ <para>SQLクエリ文字列</para>
</listitem>
<listitem>
- <para>�N�G�����Ԃ��G���e�B�e�B��SQL�e�[�u���̕ʖ�
+ <para>クエリが返すエンティティとSQLテーブルの別名
</para>
</listitem>
</itemizedlist>
- <para>Cat��ID, NAME, BIRTHDATE�̃J������g���ăN���X�Ƀ}�b�s���O�����ꍇ�A
- ��L�̃N�G���͂ǂ����A�v�f��Cat�G���e�B�e�B�ł��郊�X�g��Ԃ��܂��B</para>
+ <para>CatがID, NAME, BIRTHDATEのカラムを使ってクラスにマッピングされる場合、
+ 上記のクエリはどちらも、要素がCatエンティティであるリストを返します。</para>
- <para>�G���e�B�e�B��ʂ̃G���e�B�e�B�� <literal>���Έ�</literal> �Ń}�b�s���O���Ă���ꍇ�́A
- �l�C�e�B�u�N�G������s����ۂɁA���̕ʂ̃G���e�B�e�B��Ԃ����Ƃ�v�����܂��B
- ����Ȃ���A�f�[�^�x�[�X�ŗL�́ucolumn not found(�J������������܂���)�v�G���[���������܂��B
- * �\�L��g�p�����ۂ́A�lj��̃J�����������I�ɕԂ���܂����A
- ���̗�̂悤�ɁA<literal>Dog</literal> �� <literal>���Έ�</literal> �ł��邱�Ƃ�
- �������邱�Ƃ������͍D�݂܂��B</para>
+ <para>エンティティを別のエンティティに <literal>多対一</literal> でマッピングしている場合は、
+ ネイティブクエリを実行する際に、この別のエンティティを返すことも要求します。
+ さもなければ、データベース固有の「column not found(カラムが見つかりません)」エラーが発生します。
+ * 表記を使用した際は、追加のカラムが自動的に返されますが、
+ 次の例のように、<literal>Dog</literal> に <literal>多対一</literal> であることを
+ 明示することを私たちは好みます。</para>
<programlisting><![CDATA[sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE, DOG_ID FROM CATS").addEntity(Cat.class);
]]></programlisting>
- <para>����ɂ�� cat.getDog() ���������@�\���܂��B</para>
+ <para>これにより cat.getDog() が正しく機能します。</para>
</sect2>
<sect2>
- <title>�֘A�ƃR���N�V�����̑���</title>
+ <title>関連とコレクションの操作</title>
- <para>�v���L�V���������邽�߂̗]���ȏ�������邽�߁A
- <literal>Dog</literal> �̒��ő��������ł��܂��B
- ����� <literal>addJoin()</literal> ���\�b�h�ɂ��s���܂��B
- �֘A������̓R���N�V�����Ɍ����ł��܂��B
+ <para>プロキシを初期化するための余分な処理を避けるため、
+ <literal>Dog</literal> の中で即時結合できます。
+ これは <literal>addJoin()</literal> メソッドにより行います。
+ 関連もしくはコレクションに結合できます。
</para>
<programlisting><![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")
@@ -142,79 +144,79 @@
.addJoin("cat.dog");
]]></programlisting>
- <para>���̗�̒��ŁA�Ԃ���� <literal>Cat</literal> �́A
- �f�[�^�x�[�X�ւ̗]�������Ȃ��ŁA
- ���S�ɏ��������ꂽ <literal>dog</literal> �v���p�e�B�����܂��B
- �����Ώۂ̃v���p�e�B�ւ̃p�X��w��ł���悤�ɁA
- �ʖ��i�ucat�v�j��lj��������Ƃɒ��ӂ��Ă��������B
- �R���N�V�����̑�������������悤�ɂł��܂��B
- ���Ƃ��A<literal>Cat</literal> ����Α��� <literal>Dog</literal>
- �����Ă����ꍇ�A���̂悤�ɂȂ�܂��B</para>
+ <para>この例の中で、返される <literal>Cat</literal> は、
+ データベースへの余分処理なしで、
+ 完全に初期化された <literal>dog</literal> プロパティを持ちます。
+ 結合対象のプロパティへのパスを指定できるように、
+ 別名(「cat」)を追加したことに注意してください。
+ コレクションの即時結合も同じようにできます。
+ たとえば、<literal>Cat</literal> が一対多で <literal>Dog</literal>
+ を持っていた場合、次のようになります。</para>
<programlisting><![CDATA[sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE, D_ID, D_NAME, CAT_ID FROM CATS c, DOGS d WHERE c.ID = d.CAT_ID")
.addEntity("cat", Cat.class)
.addJoin("cat.dogs");
]]></programlisting>
- <para>���݂̂Ƃ���A
- Hibernate�Ŏg���₷�����邽�߂�SQL�N�G���̊g���Ȃ��ɁA
- �l�C�e�B�u�N�G���ʼn�����\�ɂ�����E�ɗ��Ă��܂��B
- �����^�̃G���e�B�e�B���Ԃ��ۂ�A�f�t�H���g�̕ʖ���ŏ\���ł͂Ȃ��ꍇ�ɁA
- ���͋N����n�߂܂��B
+ <para>現在のところ、
+ Hibernateで使いやすくするためのSQLクエリの拡張なしに、
+ ネイティブクエリで何かを可能にする限界に来ています。
+ 同じ型のエンティティを複数返す際や、デフォルトの別名や列名で十分ではない場合に、
+ 問題は起こり始めます。
</para>
</sect2>
<sect2>
- <title>�����G���e�B�e�B�̎擾</title>
+ <title>複数エンティティの取得</title>
- <para>�����܂ł́A���U���g�Z�b�g�̃J�������́A
- �}�b�s���O�t�@�C���Ŏw�肳�ꂽ�J�������Ɠ����ł���Ɖ��肵�Ă��܂����B
- �����̃e�[�u���������J���������ꍇ�����邽�߁A
- �����e�[�u����������SQL�N�G���Ŗ��ƂȂ�ꍇ������܂��B</para>
+ <para>ここまでは、リザルトセットのカラム名は、
+ マッピングファイルで指定されたカラム名と同じであると仮定していました。
+ 複数のテーブルが同じカラム名を持つ場合があるため、
+ 複数テーブルを結合するSQLクエリで問題となる場合があります。</para>
- <para>���L�̂悤�ȁi���s�������ȁj�N�G���ł́A
- �J�����ʖ��C���W�F�N�V�����icolumn alias injection�j���K�v�ł��B</para>
+ <para>下記のような(失敗しそうな)クエリでは、
+ カラム別名インジェクション(column alias injection)が必要です。</para>
<programlisting><![CDATA[sess.createSQLQuery("SELECT c.*, m.* FROM CATS c, CATS m WHERE c.MOTHER_ID = m.ID")
.addEntity("cat", Cat.class)
.addEntity("mother", Cat.class)
]]></programlisting>
- <para>���̃N�G���̈Ӑ}�́A
- �P�s���ƂɂQ��Cat�C���X�^���X�A�܂�L�Ƃ��̕�e��Ԃ��Ƃ������Ƃł��B
- �����J�������Ƀ}�b�s���O���邱�Ƃɂ�薼�O���Փ˂��邽�߁A���̃N�G���͎��s���܂��B
- �x�[�^�x�[�X�ɂ���ẮA�Ԃ����J�����̕ʖ��� "c.ID"�A"c.NAME" �Ȃǂ̌`���ł���A
- �}�b�s���O�Ŏw�肳�ꂽ�J�����i"ID" �� "NAME"�j�Ɠ������Ȃ����߁A���s���܂��B</para>
+ <para>このクエリの意図は、
+ 1行ごとに2つのCatインスタンス、つまり猫とその母親を返すということです。
+ 同じカラム名にマッピングすることにより名前が衝突するため、このクエリは失敗します。
+ ベータベースによっては、返されるカラムの別名が "c.ID"、"c.NAME" などの形式であり、
+ マッピングで指定されたカラム("ID" と "NAME")と等しくないため、失敗します。</para>
- <para>���L�̌`���́A�J���������d�����Ă���v�ł��B</para>
+ <para>下記の形式は、カラム名が重複しても大丈夫です。</para>
<programlisting><![CDATA[sess.createSQLQuery("SELECT {cat.*}, {mother.*} FROM CATS c, CATS m WHERE c.MOTHER_ID = m.ID")
.addEntity("cat", Cat.class)
.addEntity("mother", Cat.class)
]]></programlisting>
- <para>���̃N�G���Ŏw�肳��Ă����̂��L�Ɏ����܂��B</para>
+ <para>このクエリで指定されているものを下記に示します。</para>
<itemizedlist>
<listitem>
- <para>SQL�N�G��������
- �iHibernate���J�����̕ʖ���}�����邽�߂̃v���[�X�z���_��܂ށj</para>
+ <para>SQLクエリ文字列
+ (Hibernateがカラムの別名を挿入するためのプレースホルダを含む)</para>
</listitem>
<listitem>
- <para>�N�G���ɂ���ĕԂ����G���e�B�e�B</para>
+ <para>クエリによって返されるエンティティ</para>
</listitem>
</itemizedlist>
- <para>��L�Ŏg�p���Ă��� {cat.*} �� {mother.*} �Ƃ����\�L�́A
- �u���ׂẴv���p�e�B�v��\���ȗ��`�ł��B
- ����ɁA�����I�ɃJ��������Ă�悢�ł����A
- ���̏ꍇ�́AHibernate�Ɋe�v���p�e�B�ɑΉ�����SQL�J�����̕ʖ���}��������ׂ��ł��傤�B
- �J�����̕ʖ��̂��߂̃v���[�X�z���_�́A�e�[�u���̕ʖ��ɂ���ďC�����ꂽ�v���p�e�B���ł��B
- ���L�̗�ł́A�ʂ̃e�[�u�� cat_log ����
- �}�b�s���O���^�f�[�^�Œ�`���ꂽ Cat �Ƃ��̕�e�����܂��B
- ����D�ނȂ�Awhere�߂̒��ł�A�v���p�e�B�̕ʖ���g���܂��B</para>
+ <para>上記で使用している {cat.*} と {mother.*} という表記は、
+ 「すべてのプロパティ」を表す省略形です。
+ 代わりに、明示的にカラムを列挙してもよいですが、
+ その場合は、Hibernateに各プロパティに対応するSQLカラムの別名を挿入させるべきでしょう。
+ カラムの別名のためのプレースホルダは、テーブルの別名によって修飾されたプロパティ名です。
+ 下記の例では、別のテーブル cat_log から
+ マッピングメタデータで定義された Cat とその母親を復元します。
+ もし好むなら、where節の中でも、プロパティの別名を使えます。</para>
<programlisting><![CDATA[String sql = "SELECT ID as {c.id}, NAME as {c.name}, " +
"BIRTHDATE as {c.birthDate}, MOTHER_ID as {c.mother}, {mother.*} " +
@@ -226,19 +228,19 @@
]]></programlisting>
<sect3 id="querysql-aliasreferences" revision="2">
- <title>�ʖ��ƃv���p�e�B�̃��t�@�����X</title>
+ <title>別名とプロパティのリファレンス</title>
- <para>�����̏ꍇ�A��L�̂悤�ȕʖ��C���W�F�N�V�������K�v�ł��B
- �������A�����v���p�e�B�A�p�����ʎq�A�R���N�V�����Ȃǂ̂悤��
- ��蕡�G�ȃ}�b�s���O�Ɗ֘A����N�G�����Ȃ���ł��B
- �������̕ʖ���g�p���邱�Ƃɂ��AHibernate�͓K�ȕʖ���}���ł��܂��B</para>
+ <para>多くの場合、上記のような別名インジェクションが必要です。
+ ただし、複合プロパティ、継承識別子、コレクションなどのような
+ より複雑なマッピングと関連するクエリがなければです。
+ ある特定の別名を使用することにより、Hibernateは適切な別名を挿入できます。</para>
- <para>�ʖ��C���W�F�N�V�����Ƃ��Ďg�p�ł����̂��\�Ɏ����܂��B
- ���ӁF���\�̕ʖ��͈��ł��B
- ���ꂼ��̕ʖ��͈�ӂł���A�g�p����ۂɂ͂����炭�قȂ閼�O�����܂��B</para>
+ <para>別名インジェクションとして使用できるものを下表に示します。
+ 注意:下表の別名は一例です。
+ それぞれの別名は一意であり、使用する際にはおそらく異なる名前を持ちます。</para>
<table frame="topbot" id="aliasinjection-summary">
- <title>�ʖ��ɑ}�����閼�O</title>
+ <title>別名に挿入する名前</title>
<tgroup cols="3">
<colspec colwidth="1*" />
@@ -249,60 +251,60 @@
<thead>
<row>
- <entry>���</entry>
- <entry>�\��</entry>
- <entry>��</entry>
+ <entry>説明</entry>
+ <entry>構文</entry>
+ <entry>例</entry>
</row>
</thead>
<tbody>
<row>
- <entry>�P���ȃv���p�e�B</entry>
+ <entry>単純なプロパティ</entry>
<entry><literal>{[aliasname].[propertyname]}</literal></entry>
<entry><literal>A_NAME as {item.name}</literal></entry>
</row>
<row>
- <entry>�����v���p�e�B</entry>
+ <entry>複合プロパティ</entry>
<entry><literal>{[aliasname].[componentname].[propertyname]}</literal></entry>
<entry><literal>CURRENCY as {item.amount.currency}, VALUE as
{item.amount.value}</literal></entry>
</row>
<row>
- <entry>�G���e�B�e�B�̃N���X���ʂ���l</entry>
+ <entry>エンティティのクラスを識別する値</entry>
<entry><literal>{[aliasname].class}</literal></entry>
<entry><literal>DISC as {item.class}</literal></entry>
</row>
<row>
- <entry>�G���e�B�e�B�̑S�v���p�e�B</entry>
+ <entry>エンティティの全プロパティ</entry>
<entry><literal>{[aliasname].*}</literal></entry>
<entry><literal>{item.*}</literal></entry>
</row>
<row>
- <entry>�R���N�V�����̃L�[</entry>
+ <entry>コレクションのキー</entry>
<entry><literal>{[aliasname].key}</literal></entry>
<entry><literal>ORGID as {coll.key}</literal></entry>
</row>
<row>
- <entry>�R���N�V������ID</entry>
+ <entry>コレクションのID</entry>
<entry><literal>{[aliasname].id}</literal></entry>
<entry><literal>EMPID as {coll.id}</literal></entry>
</row>
<row>
- <entry>�R���N�V�����̗v�f</entry>
+ <entry>コレクションの要素</entry>
<entry><literal>{[aliasname].element}</literal></entry>
<entry><literal>XID as {coll.element}</literal></entry>
</row>
<row>
- <entry>�R���N�V�����̗v�f�̃v���p�e�B</entry>
+ <entry>コレクションの要素のプロパティ</entry>
<entry><literal>{[aliasname].element.[propertyname]}</literal></entry>
<entry><literal>NAME as {coll.element.name}</literal></entry>
</row>
<row>
- <entry>�R���N�V�����̗v�f�̑S�v���p�e�B</entry>
+ <entry>コレクションの要素の全プロパティ</entry>
<entry><literal>{[aliasname].element.*}</literal></entry>
<entry><literal>{coll.element.*}</literal></entry>
</row>
<row>
- <entry>�R���N�V�����̑S�v���p�e�B</entry>
+ <entry>コレクションの全プロパティ</entry>
<entry><literal>{[aliasname].*}</literal></entry>
<entry><literal>{coll.*}</literal></entry>
</row>
@@ -313,43 +315,43 @@
</sect2>
<sect2>
- <title>�Ǘ�����Ă��Ȃ��G���e�B�e�B�̎擾</title>
+ <title>管理されていないエンティティの取得</title>
- <para>�l�C�e�B�uSQL�N�G���� ResultTransformer ��K�p�ł��܂��B
- ���L�̂悤�ɁA�Ⴆ�A�Ǘ�����Ă��Ȃ��G���e�B�e�B��Ԃ��܂��B</para>
+ <para>ネイティブSQLクエリに ResultTransformer を適用できます。
+ 下記のように、例えば、管理されていないエンティティを返します。</para>
<programlisting><![CDATA[sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS")
.setResultTransformer(Transformers.aliasToBean(CatDTO.class))]]></programlisting>
- <para>���̃N�G���Ŏw�肳��Ă����̂��L�Ɏ����܂��B</para>
+ <para>このクエリで指定されているものを下記に示します。</para>
<itemizedlist>
<listitem>
- <para>SQL�N�G��������</para>
+ <para>SQLクエリ文字列</para>
</listitem>
<listitem>
- <para>���ʂ�ϊ��������</para>
+ <para>結果を変換したもの</para>
</listitem>
</itemizedlist>
- <para>��L�̃N�G���́A�C���X�^���X�����ANAME �� BIRTHDATE �̒l��
- �Ή�����v���p�e�B������̓t�B�[���h�ɑ}������ <literal>CatDTO</literal>
- �̃��X�g��Ԃ��܂��B</para>
+ <para>上記のクエリは、インスタンス化し、NAME と BIRTHDATE の値を
+ 対応するプロパティもしくはフィールドに挿入した <literal>CatDTO</literal>
+ のリストを返します。</para>
</sect2>
<sect2>
- <title>�p���̐���</title>
+ <title>継承の制御</title>
- <para>�p���̈ꕔ�Ƃ��ă}�b�s���O���ꂽ�G���e�B�e�B��₢���킹��l�C�e�B�uSQL�N�G���́A
- �x�[�X�̃N���X�Ƃ��̂��ׂẴT�u�N���X�̃v���p�e�B���ׂĂ�܂܂Ȃ���Ȃ�܂���B</para>
+ <para>継承の一部としてマッピングされたエンティティを問い合わせるネイティブSQLクエリは、
+ ベースのクラスとそのすべてのサブクラスのプロパティすべてを含まなければなりません。</para>
</sect2>
<sect2>
- <title>�p�����[�^</title>
+ <title>パラメータ</title>
- <para>�l�C�e�B�uSQL�N�G���́A�ȉ��̂悤�ɁA
- ���O�t���p�����[�^�i:name�j�Ɠ��l�Ɉʒu�p�����[�^��T�|�[�g���܂��B</para>
+ <para>ネイティブSQLクエリは、以下のように、
+ 名前付きパラメータ(:name)と同様に位置パラメータをサポートします。</para>
<programlisting><![CDATA[Query query = sess.createSQLQuery("SELECT * FROM CATS WHERE NAME like ?").addEntity(Cat.class);
List pusList = query.setString(0, "Pus%").list();
@@ -361,11 +363,11 @@
</sect1>
<sect1 id="querysql-namedqueries" revision="3">
- <title>���O�t��SQL�N�G��</title>
+ <title>名前付きSQLクエリ</title>
- <para>���O�t��SQL�N�G���̓}�b�s���O�h�L�������g�Œ�`���邱�Ƃ��ł��A
- ���O�t��HQL�N�G���ƑS���������@�ŌĂԂ��Ƃ��ł��܂��B
- ���̏ꍇ�A<literal>addEntity()</literal> ��Ăяo���K�v�� <emphasis>�Ȃ�</emphasis> �ł��B</para>
+ <para>名前付きSQLクエリはマッピングドキュメントで定義することができ、
+ 名前付きHQLクエリと全く同じ方法で呼ぶことができます。
+ この場合、<literal>addEntity()</literal> を呼び出す必要は <emphasis>ない</emphasis> です。</para>
<programlisting><![CDATA[<sql-query name="persons">
<return alias="person" class="eg.Person"/>
@@ -381,9 +383,9 @@
.setMaxResults(50)
.list();]]></programlisting>
- <para>�֘A�������邽�߂ƃR���N�V��������������N�G�����`���邽�߂ɁA���ꂼ��
- <literal><return-join></literal> �� <literal><load-collection></literal>
- �v�f��g���܂��B</para>
+ <para>関連を結合するためとコレクションを初期化するクエリを定義するために、それぞれ
+ <literal><return-join></literal> と <literal><load-collection></literal>
+ 要素を使います。</para>
<programlisting><![CDATA[<sql-query name="personsWith">
<return alias="person" class="eg.Person"/>
@@ -401,9 +403,9 @@
WHERE person.NAME LIKE :namePattern
</sql-query>]]></programlisting>
- <para>���O�t��SQL�N�G���̓X�J���l��Ԃ����Ƃ�ł��܂��B
- <literal><return-scalar></literal> �v�f��g���āA
- ��̕ʖ���Hibernate�̌^��錾���Ȃ���Ȃ�܂���B</para>
+ <para>名前付きSQLクエリはスカラ値を返すこともできます。
+ <literal><return-scalar></literal> 要素を使って、
+ 列の別名とHibernateの型を宣言しなければなりません。</para>
<programlisting><![CDATA[<sql-query name="mySqlQuery">
<return-scalar column="name" type="string"/>
@@ -414,10 +416,10 @@
</sql-query>]]></programlisting>
- <para>���U���g�Z�b�g�̃}�b�s���O���� <literal><resultset></literal>
- �ɊO�o�����邱�Ƃ��ł��܂��B
- �����̖��O�t���N�G���ōė��p������A<literal>setResultSetMapping()</literal>
- API��ʂ��čė��p������ł��܂��B
+ <para>リザルトセットのマッピング情報を <literal><resultset></literal>
+ に外出しすることができます。
+ 複数の名前付きクエリで再利用したり、<literal>setResultSetMapping()</literal>
+ APIを通して再利用したりできます。
</para>
<programlisting><![CDATA[<resultset name="personAddress">
@@ -439,8 +441,8 @@
WHERE person.NAME LIKE :namePattern
</sql-query>]]></programlisting>
- <para>����ɁAhbm�t�@�C����̃��U���g�Z�b�g�̃}�b�s���O����
- ����Java�R�[�h�̒��Ŏg�p�ł��܂��B</para>
+ <para>代わりに、hbmファイル内のリザルトセットのマッピング情報を
+ 直接Javaコードの中で使用できます。</para>
<programlisting><![CDATA[List cats = sess.createSQLQuery(
"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id"
@@ -449,11 +451,11 @@
.list();]]></programlisting>
<sect2 id="propertyresults">
- <title>��Ɨ�̕ʖ����I�Ɏw�肷�邽�߂� return-property ��g��</title>
+ <title>列と列の別名を明示的に指定するために return-property を使う</title>
- <para>�ʖ���}�����邽�߂� <literal>{}</literal> �\����g������ɁA
- <literal><return-property></literal> ��g���A
- �ǂ̗�̕ʖ���g���̂����ł��܂��B</para>
+ <para>別名を挿入するために <literal>{}</literal> 構文を使う代わりに、
+ <literal><return-property></literal> を使い、
+ どの列の別名を使うのかを明示できます。</para>
<programlisting><![CDATA[<sql-query name="mySqlQuery">
<return alias="person" class="eg.Person">
@@ -468,9 +470,9 @@
</sql-query>
]]></programlisting>
- <para><literal><return-property></literal> �͕����̗������܂��B
- ����́A������̃v���p�e�B���ߍׂ�������ł��Ȃ��Ƃ����A
- <literal>{}</literal> �\���̐���������܂��B</para>
+ <para><literal><return-property></literal> は複数の列も扱えます。
+ これは、複数列のプロパティをきめ細かく制御できないという、
+ <literal>{}</literal> 構文の制限を解決します。</para>
<programlisting><![CDATA[<sql-query name="organizationCurrentEmployments">
<return alias="emp" class="Employment">
@@ -488,24 +490,24 @@
ORDER BY STARTDATE ASC
</sql-query>]]></programlisting>
- <para>���̗�ł́A�}���̂��߂� <literal>{}</literal> �\���Ƃ�������ɁA
- <literal><return-property></literal> ��g���Ă��邱�Ƃɒ��ӂ��Ă��������B
- ��ƃv���p�e�B��ǂ̂悤�ɎQ�Ƃ��邩��I�ׂ܂��B</para>
+ <para>この例では、挿入のための <literal>{}</literal> 構文といっしょに、
+ <literal><return-property></literal> を使っていることに注意してください。
+ 列とプロパティをどのように参照するかを選べます。</para>
- <para>�}�b�s���O�� discriminator ���܂܂�Ă���ꍇ�A
- discriminator �̗��w�肷�邽�߂ɁA<return-discriminator>
- ��g��Ȃ���Ȃ�܂���B</para>
+ <para>マッピングに discriminator が含まれている場合、
+ discriminator の列を指定するために、<return-discriminator>
+ を使わなければなりません。</para>
</sect2>
<sect2 id="sp_query" revision="1">
- <title>�₢���킹���邽�߂ɃX�g�A�h�v���V�[�W����g��</title>
+ <title>問い合わせするためにストアドプロシージャを使う</title>
- <para>Hibernate�̓o�[�W����3����A�X�g�A�h�v���V�[�W���ƃX�g�A�h���o�R�̖₢���킹��
- �T�|�[�g����܂����B
- �ȍ~�̕����̑����́A�����ɓ��Ă͂܂�܂��B
- �X�g�A�h�v���V�[�W����X�g�A�h����Hibernate�Ŏg�����߂ɂ́A
- 1�Ԗڂ̏o�̓p�����[�^�Ƃ��ă��U���g�Z�b�g��Ԃ��Ȃ���Ȃ�܂���B
- Oracle 9�i������͂���ȏ�̃o�[�W�����j�̃X�g�A�h�v���V�[�W���̗��ȉ��Ɏ����܂��B</para>
+ <para>Hibernateはバージョン3から、ストアドプロシージャとストアド関数経由の問い合わせが
+ サポートされました。
+ 以降の文書の多くは、両方に当てはまります。
+ ストアドプロシージャやストアド関数をHibernateで使うためには、
+ 1番目の出力パラメータとしてリザルトセットを返さなければなりません。
+ Oracle 9(もしくはそれ以上のバージョン)のストアドプロシージャの例を以下に示します。</para>
<programlisting><![CDATA[CREATE OR REPLACE FUNCTION selectAllEmployments
RETURN SYS_REFCURSOR
@@ -520,8 +522,8 @@
RETURN st_cursor;
END;]]></programlisting>
- <para>Hibernate�ł��̃N�G����g�����߂ɂ́A
- ���O�t���N�G���Ń}�b�s���O����K�v������܂��B</para>
+ <para>Hibernateでこのクエリを使うためには、
+ 名前付きクエリでマッピングする必要があります。</para>
<programlisting><![CDATA[<sql-query name="selectAllEmployees_SP" callable="true">
<return alias="emp" class="Employment">
@@ -539,57 +541,57 @@
{ ? = call selectAllEmployments() }
</sql-query>]]></programlisting>
- <para>���ӁF���̂Ƃ���A�X�g�A�h�v���V�[�W���̓X�J���ƃG���e�B�e�B��Ԃ��݂̂ł��B
- <literal><return-join></literal> �� <literal><load-collection></literal>
- �̓T�|�[�g����Ă��܂���B</para>
+ <para>注意:今のところ、ストアドプロシージャはスカラとエンティティを返すのみです。
+ <literal><return-join></literal> と <literal><load-collection></literal>
+ はサポートされていません。</para>
<sect3 id="querysql-limits-storedprocedures" revision="1">
- <title>�X�g�A�h�v���V�[�W����g����ł̃��[���Ɛ���</title>
+ <title>ストアドプロシージャを使う上でのルールと制限</title>
- <para>Hibernate�ŃX�g�A�h�v���V�[�W�������g�����߂ɂ́A
- ���̃v���V�[�W���͂������̃��[���ɏ�������K�v������܂��B
- ���[���ɏ������Ă��Ȃ��v���V�[�W���́AHibernate�Ŏg�����Ƃ͂ł��܂���B
- ����ł�A�������Ă��Ȃ��v���V�[�W����g�������̂ł���A
- <literal>session.connection()</literal> ��ʂ��Ď��s���Ȃ���Ȃ�܂���B
- ���[���̓f�[�^�x�[�X���ƂɈقȂ�܂��B
- �X�g�A�h�v���V�[�W���̃Z�}���e�B�b�N�X�ƃV���^�b�N�X�́A
- �f�[�^�x�[�X�x���_���ƂɈقȂ邽�߂ł��B</para>
+ <para>Hibernateでストアドプロシージャや関数を使うためには、
+ そのプロシージャはいくつかのルールに準拠する必要があります。
+ ルールに準拠していないプロシージャは、Hibernateで使うことはできません。
+ それでも、準拠していないプロシージャを使いたいのであれば、
+ <literal>session.connection()</literal> を通じて実行しなければなりません。
+ ルールはデータベースごとに異なります。
+ ストアドプロシージャのセマンティックスとシンタックスは、
+ データベースベンダごとに異なるためです。</para>
- <para><literal>setFirstResult()/setMaxResults()</literal> ��g���āA
- �X�g�A�h�v���V�[�W���N�G����y�[�W�������邱�Ƃ͂ł��܂���B</para>
+ <para><literal>setFirstResult()/setMaxResults()</literal> を使って、
+ ストアドプロシージャクエリをページ分けすることはできません。</para>
- <para>��������Ăяo�����́A�W���ł���SQL92�ɏ]�����Ƃł��B
- <literal>{ ? = call functionName(<parameters>) }</literal> ��
- <literal>{ ? = call procedureName(<parameters>) }</literal> �ł��B
- �l�C�e�B�u�ȌĂяo���\���̓T�|�[�g����Ă��܂���B</para>
+ <para>推奨する呼び出し方は、標準であるSQL92に従うことです。
+ <literal>{ ? = call functionName(<parameters>) }</literal> や
+ <literal>{ ? = call procedureName(<parameters>) }</literal> です。
+ ネイティブな呼び出し構文はサポートされていません。</para>
- <para>Oracle�ɂ͉��L�̃��[�����K�p����܂��B</para>
+ <para>Oracleには下記のルールが適用されます。</para>
<itemizedlist spacing="compact">
<listitem>
- <para>���̓��U���g�Z�b�g��Ԃ��Ȃ���Ȃ�܂���B
- �v���V�[�W���̑������̓��U���g�Z�b�g��Ԃ����߁A
- <literal>OUT</literal> �łȂ���Ȃ�܂���B
- Oracle 9��10�ł́A<literal>SYS_REFCURSOR</literal> ��g�����Ƃɂ���Ăł��܂��B
- Oracle�ł� <literal>REF CURSOR</literal> �^���`����K�v������܂��B
- Oracle�̕�����Q�Ƃ��Ă��������B</para>
+ <para>関数はリザルトセットを返さなければなりません。
+ プロシージャの第一引数はリザルトセットを返すため、
+ <literal>OUT</literal> でなければなりません。
+ Oracle 9と10では、<literal>SYS_REFCURSOR</literal> を使うことによってできます。
+ Oracleでは <literal>REF CURSOR</literal> 型を定義する必要があります。
+ Oracleの文献を参照してください。</para>
</listitem>
</itemizedlist>
- <para>Sybase��MS SQL�T�[�o�[�ɓK�p����郋�[�����L�Ɏ����܂��B</para>
+ <para>SybaseとMS SQLサーバーに適用されるルールを下記に示します。</para>
<itemizedlist spacing="compact">
<listitem>
- <para>�v���V�[�W���̓��U���g�Z�b�g��Ԃ��Ȃ���Ȃ�܂���B
- �T�[�o�[�͕����̃��U���g�Z�b�g�ƍX�V�J�E���g��Ԃ��܂����A
- Hibernate��1�ڂ̃��U���g�Z�b�g������Ԃ����Ƃɒ��ӂ��Ă��������B
- ���̑��͂��ׂĎ̂Ă��܂��B</para>
+ <para>プロシージャはリザルトセットを返さなければなりません。
+ サーバーは複数のリザルトセットと更新カウントを返しますが、
+ Hibernateは1つ目のリザルトセットだけを返すことに注意してください。
+ その他はすべて捨てられます。</para>
</listitem>
<listitem>
- <para>�v���V�[�W���̒��� <literal>SET NOCOUNT ON</literal> ��L���ɂł���A
- �����炭�������悭�Ȃ�ł��傤�B
- �������A����͕K�v���ł͂���܂���B</para>
+ <para>プロシージャの中で <literal>SET NOCOUNT ON</literal> を有効にできれば、
+ おそらく効率がよくなるでしょう。
+ しかし、これは必要条件ではありません。</para>
</listitem>
</itemizedlist>
</sect3>
@@ -597,15 +599,15 @@
</sect1>
<sect1 id="querysql-cud">
- <title>�쐬�A�X�V�A�폜�̂��߂̃J�X�^��SQL</title>
+ <title>作成、更新、削除のためのカスタムSQL</title>
- <para>Hibernate3�͍쐬�A�X�V�A�폜�����̂��߂̃J�X�^��SQL����g�p�ł��܂��B
- �N���X�ƃR���N�V�����̉i�����@�\�́A�R���t�B�O���[�V�������ɐ������ꂽ������
- �iinsertsql�Adeletesql�Aupdatesql�Ȃǁj�̃Z�b�g���łɕێ����Ă��܂��B
- �����̕�������A
- <literal><sql-insert></literal>�A
- <literal><sql-delete></literal>�A
- <literal><sql-update></literal> �Ƃ����}�b�s���O�^�O���D�悳��܂��B</para>
+ <para>Hibernate3は作成、更新、削除処理のためのカスタムSQL文を使用できます。
+ クラスとコレクションの永続化機構は、コンフィグレーション時に生成された文字列
+ (insertsql、deletesql、updatesqlなど)のセットをすでに保持しています。
+ これらの文字列より、
+ <literal><sql-insert></literal>、
+ <literal><sql-delete></literal>、
+ <literal><sql-update></literal> というマッピングタグが優先されます。</para>
<programlisting><![CDATA[<class name="Person">
<id name="id">
@@ -617,11 +619,11 @@
<sql-delete>DELETE FROM PERSON WHERE ID=?</sql-delete>
</class>]]></programlisting>
- <para>SQL�ڃf�[�^�x�[�X�Ŏ��s���邽�߁A�D�݂̕������R�Ɏg�p�ł��܂��B
- �f�[�^�x�[�X�Ǝ���SQL��g���A���R�}�b�s���O�̃|�[�^�r���e�B��������܂��B</para>
+ <para>SQLを直接データベースで実行するため、好みの方言を自由に使用できます。
+ データベース独自のSQLを使えば、当然マッピングのポータビリティが下がります。</para>
- <para><literal>callable</literal> ������Z�b�g����A
- �X�g�A�h�v���V�[�W����g�p�ł��܂��B</para>
+ <para><literal>callable</literal> 属性をセットすれば、
+ ストアドプロシージャを使用できます。</para>
<programlisting><![CDATA[<class name="Person">
<id name="id">
@@ -633,21 +635,21 @@
<sql-update callable="true">{? = call updatePerson (?, ?)}</sql-update>
</class>]]></programlisting>
- <para>���̂Ƃ���A�ʒu�p�����[�^�̏��Ԃ͂ƂĂ�d�v�ł��B
- ���Ȃ킿�AHibernate�����҂��鏇���łȂ���Ȃ�܂���B</para>
+ <para>今のところ、位置パラメータの順番はとても重要です。
+ すなわち、Hibernateが期待する順序でなければなりません。</para>
- <para><literal>org.hiberante.persister.entity</literal> ���x���̃f�o�b�O���O��
- �L���ɂ��邱�Ƃɂ���āA���҂���鏇�Ԃ�m���߂��܂��B
- ���̃��x����L���ɂ��邱�Ƃɂ��A�G���e�B�e�B�̍쐬�A�X�V�A�폜�Ȃǂ�
- �g�p�����ÓI��SQL���o�͂���܂��B
- �i���҂���鏇����m�F���邽�߂ɂ́AHibernate����������ÓI��SQL��I�[�o�[���C�h����
- �J�X�^��SQL��}�b�s���O�t�@�C���Ɋ܂߂Ȃ����Ƃ�Y��Ȃ��ł��������B�j</para>
+ <para><literal>org.hiberante.persister.entity</literal> レベルのデバッグログを
+ 有効にすることによって、期待される順番を確かめられます。
+ このレベルを有効にすることにより、エンティティの作成、更新、削除などで
+ 使用される静的なSQLが出力されます。
+ (期待される順序を確認するためには、Hibernateが生成する静的なSQLをオーバーライドする
+ カスタムSQLをマッピングファイルに含めないことを忘れないでください。)</para>
- <para>�X�g�A�h�v���V�[�W���͑}��/�X�V/�폜���ꂽ�s����Ԃ��K�v������܂�
- �i�ǂݍ��݂̏ꍇ�́A�Ԃ��Ȃ����͕Ԃ������悢�ł��j�B
- ���s����Hibernate��SQL���̐�����`�F�b�N���邩��ł��B
- Hibernate�́ACUD�����̂��߂̐��l�̏o�̓p�����[�^�Ƃ��āA
- SQL���̍ŏ��̃p�����[�^����L�^���܂��B</para>
+ <para>ストアドプロシージャは挿入/更新/削除された行数を返す必要があります
+ (読み込みの場合は、返さないよりは返す方がよいです)。
+ 実行時にHibernateがSQL文の成功をチェックするからです。
+ Hibernateは、CUD処理のための数値の出力パラメータとして、
+ SQL文の最初のパラメータをいつも記録します。</para>
<programlisting><![CDATA[CREATE OR REPLACE FUNCTION updatePerson (uid IN NUMBER, uname IN VARCHAR2)
RETURN NUMBER IS
@@ -665,9 +667,9 @@
</sect1>
<sect1 id="querysql-load">
- <title>���[�h�̂��߂̃J�X�^��SQL</title>
+ <title>ロードのためのカスタムSQL</title>
- <para>�G���e�B�e�B��ǂݍ��ނ��߂̓Ǝ���SQL�i�������HQL�j�N�G����錾�ł��܂��B</para>
+ <para>エンティティを読み込むための独自のSQL(もしくはHQL)クエリも宣言できます。</para>
<programlisting><![CDATA[<sql-query name="person">
<return alias="pers" class="Person" lock-mode="upgrade"/>
@@ -677,8 +679,8 @@
FOR UPDATE
</sql-query>]]></programlisting>
- <para>����́A�܂��Ɂi�ȑO�c�_�����j���O�t���N�G���̐錾�ł��B
- ���̖��O�t���N�G����N���X�̃}�b�s���O����Q�Ƃł��܂��B</para>
+ <para>これは、まさに(以前議論した)名前付きクエリの宣言です。
+ この名前付きクエリをクラスのマッピングから参照できます。</para>
<programlisting><![CDATA[<class name="Person">
<id name="id">
@@ -689,9 +691,9 @@
</class>]]></programlisting>
- <para>����̓X�g�A�h�v���V�[�W���ł�������삵�܂��B</para>
+ <para>これはストアドプロシージャでさえも動作します。</para>
- <para>���̂悤�ɁA�R���N�V�������[�h���邽�߂̃N�G��������`���Ă悢�ł��B</para>
+ <para>次のように、コレクションをロードするためのクエリさえ定義してよいです。</para>
<programlisting><![CDATA[<set name="employments" inverse="true">
<key/>
@@ -707,8 +709,8 @@
ORDER BY STARTDATE ASC, EMPLOYEE ASC
</sql-query>]]></programlisting>
- <para>���̂悤�ɁA�����t�F�b�`�ɂ��R���N�V�������[�h����
- �G���e�B�e�B���[�_�[���`�ł��܂��B</para>
+ <para>次のように、結合フェッチによりコレクションをロードする
+ エンティティローダーを定義できます。</para>
<programlisting><![CDATA[<sql-query name="person">
<return alias="pers" class="Person"/>
@@ -721,4 +723,4 @@
</sql-query>]]></programlisting>
</sect1>
-</chapter>
\ No newline at end of file
+</chapter>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/session_api.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/session_api.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/session_api.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,81 +1,83 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="objectstate">
- <title>�I�u�W�F�N�g����</title>
+ <title>オブジェクトを扱う</title>
<para>
- Hibernate �͊��S�ȃI�u�W�F�N�g/�����[�V���i���}�b�s���O�\�����[�V�����ł���A
- �f�[�^�x�[�X�Ǘ��V�X�e���̏ڍׂ�J���҂���B�����邾���łȂ��A �I�u�W�F�N�g�� <emphasis>��ԊǗ�</emphasis> ��s���܂��B
- ����́AJDBC/SQL�i���w�Ɠ����悤��SQL <literal>��</literal> �̊Ǘ��Ƃ͈قȂ�A
- Java�A�v���P�[�V�����ɂ�����i�����ɑ���A�ƂĂ���R�ȃI�u�W�F�N�g�w���̍l��������܂��B
+ Hibernate は完全なオブジェクト/リレーショナルマッピングソリューションであり、
+ データベース管理システムの詳細を開発者から隠蔽するだけでなく、 オブジェクトの <emphasis>状態管理</emphasis> も行います。
+ これは、JDBC/SQL永続層と同じようなSQL <literal>文</literal> の管理とは異なり、
+ Javaアプリケーションにおける永続化に対する、とても自然なオブジェクト指向の考え方を提供します。
</para>
<para>
- ����������AHibernate��p����A�v���P�[�V�����J���҂́A�I�u�W�F�N�g�� <emphasis>���</emphasis> �ɂ��Ă�
- ��Ɉӎ����ׂ��ł���ASQL���̎��s�ɂ��Ă͕K����������ł͂���܂���B
- ���̕����́A�ʏ�AHibernate���������A�V�X�e���̃p�t�H�[�}���X��`���[�j���O����Ƃ��ɂ����A ���ɂȂ��Ă��܂��B
+ 言いかえれば、Hibernateを用いるアプリケーション開発者は、オブジェクトの <emphasis>状態</emphasis> については
+ 常に意識すべきであり、SQL文の実行については必ずしもそうではありません。
+ この部分は、通常、Hibernateが処理し、システムのパフォーマンスをチューニングするときにだけ、 問題になってきます。
</para>
<sect1 id="objectstate-overview">
- <title>Hibernate�ɂ�����I�u�W�F�N�g�̏��</title>
+ <title>Hibernateにおけるオブジェクトの状態</title>
<para>
- Hibernate�͎��̂悤�ȃI�u�W�F�N�g�̏�Ԃ��`���A�T�|�[�g���Ă��܂��B
+ Hibernateは次のようなオブジェクトの状態を定義し、サポートしています。
</para>
<itemizedlist>
<listitem>
<para>
- <emphasis> �ꎞ�I(Transient) </emphasis> - <literal>new</literal>
- ���Z�q��g���� �C���X�^���X�����ꂽ�����ŁA Hibernate�� <literal>Session</literal>
- �Ɋ֘A�t�����Ă��Ȃ��I�u�W�F�N�g�́A �ꎞ�I(transient)�ł��B
- ����́A�f�[�^�x�[�X�ɉi���I�ȕ\���������A���ʎq�ƂȂ�l�͊��蓖�Ă��Ă��܂���B
- �ꎞ�I�ȃC���X�^���X�́A�A�v���P�[�V���������̎Q�Ƃ�ǂ��ɂ�ێ����Ȃ��ꍇ�ɁA �K�x�[�W�R���N�^�ɂ���Ĕj������܂��B
- �I�u�W�F�N�g��i���I(persistent)�ȏ�Ԃɂ��邽�߂ɂ́AHibernate��
- <literal>Session</literal> ��g���܂��傤�B
- �i���̏�ԑJ�ڂɕK�v�ƂȂ�SQL���̔��s�́AHibernate�ɔC���܂��傤�B�j
+ <emphasis> 一時的(Transient) </emphasis> - <literal>new</literal>
+ 演算子を使って インスタンス化されただけで、 Hibernateの <literal>Session</literal>
+ に関連付けられていないオブジェクトは、 一時的(transient)です。
+ それは、データベースに永続的な表現を持たず、識別子となる値は割り当てられていません。
+ 一時的なインスタンスは、アプリケーションがその参照をどこにも保持しない場合に、 ガベージコレクタによって破棄されます。
+ オブジェクトを永続的(persistent)な状態にするためには、Hibernateの
+ <literal>Session</literal> を使いましょう。
+ (この状態遷移に必要となるSQL文の発行は、Hibernateに任せましょう。)
</para>
</listitem>
<listitem>
<para>
- <emphasis>�i���I(Persistent)</emphasis> -
- �i���I�ȃC���X�^���X�̓f�[�^�x�[�X�� �i���I�ȕ\�������A���ʎq�ƂȂ�l�����Ă��܂��B
- ����́A�Z�[�u���ꂽ��A���[�h���ꂽ�肷�邩�����܂��A
- ��`��́A <literal>Session</literal> �̃X�R�[�v�̒��ɑ��݂��Ă��܂��B
- Hibernate�́A��ƒP�ʁiUnit of work�j�����������Ƃ��ɁA �i����Ԃ̃I�u�W�F�N�g�ɉ�����ꂽ�ύX���o���A
- �I�u�W�F�N�g�̏�Ԃƃf�[�^�x�[�X�����܂��B �I�u�W�F�N�g��ꎞ�I(transient)�ɂ���Ƃ��́A�J���҂́A���Ƃ�
- <literal>UPDATE</literal> ���� <literal>DELETE</literal>
- ������s���܂���B
+ <emphasis>永続的(Persistent)</emphasis> -
+ 永続的なインスタンスはデータベースに 永続的な表現を持ち、識別子となる値を持っています。
+ それは、セーブされたり、ロードされたりするかもしれませんが、
+ 定義上は、 <literal>Session</literal> のスコープの中に存在しています。
+ Hibernateは、作業単位(Unit of work)が完了したときに、 永続状態のオブジェクトに加えられた変更を検出し、
+ オブジェクトの状態とデータベースを同期します。 オブジェクトを一時的(transient)にするときは、開発者は、手作業で
+ <literal>UPDATE</literal> 文や <literal>DELETE</literal>
+ 文を実行しません。
</para>
</listitem>
<listitem>
<para>
- <emphasis>����(Detached)</emphasis> - �������ꂽ�C���X�^���X�Ƃ́A�i��������Ă��邪�A
- ����Ɗ֘A�t���Ă��� <literal>Session</literal> ���N���[�Y����Ă���I�u�W�F�N�g�̂��Ƃł��B
- ���̃I�u�W�F�N�g�ւ̎Q�Ƃ́A�ˑR�Ƃ��ėL���ł��B
- �����āA������A�������ꂽ��Ԃɂ���I�u�W�F�N�g�́A�C�����邱�Ƃ����ł��܂��B
- �������ꂽ�C���X�^���X�́A�����x�i�����������i�����āA���ׂĂ̕ύX��i�����������j�Ƃ��ɁA �V����
- <literal>Session</literal> �ɍĒlj��ł��܂��B
- ���̋@�\�́A���[�U���l���鎞�Ԃ�K�v�Ƃ���悤�ȁA�����Ԃɋy�ԍ�ƒP�ʂɑ��� �v���O���~���O���f����\�ɂ��܂��B
- ��X�́A����� <emphasis>�A�v���P�[�V�����̃g�����U�N�V�����iapplication
- transactions�j</emphasis> �ƌĂ�ł��܂��B ���Ȃ킿�A���[�U���猩����ƒP�ʂ��Ƃ������Ƃł��B
+ <emphasis>分離(Detached)</emphasis> - 分離されたインスタンスとは、永続化されているが、
+ それと関連付いていた <literal>Session</literal> がクローズされているオブジェクトのことです。
+ そのオブジェクトへの参照は、依然として有効です。
+ そして、もちろん、分離された状態にあるオブジェクトは、修正することさえできます。
+ 分離されたインスタンスは、もう一度永続化したい(そして、すべての変更を永続化したい)ときに、 新しい
+ <literal>Session</literal> に再追加できます。
+ この機能は、ユーザが考える時間を必要とするような、長期間に及ぶ作業単位に対する プログラミングモデルを可能にします。
+ 我々は、これを <emphasis>アプリケーションのトランザクション(application
+ transactions)</emphasis> と呼んでいます。 すなわち、ユーザから見た作業単位だということです。
</para>
</listitem>
</itemizedlist>
<para>
- ���ꂩ��A��ԂƏ�ԑJ�ځi�����āA�J�ڂ̂��������ƂȂ�Hibernate�̃��\�b�h�j�ɂ��� �A�ڍׂɏq�ׂ܂��B
+ これから、状態と状態遷移(そして、遷移のきっかけとなるHibernateのメソッド)について 、詳細に述べます。
</para>
</sect1>
<sect1 id="objectstate-makingpersistent" revision="1">
- <title>�I�u�W�F�N�g��i����Ԃɂ���</title>
+ <title>オブジェクトを永続状態にする</title>
<para>
- �V�����C���X�^���X�����ꂽ�i���N���X�̃C���X�^���X�́A Hibernate�ł�
- <emphasis>�ꎞ�I(transient)</emphasis> �ƌ��Ȃ���܂��B
- �ȉ��̂悤�ɁA�Z�b�V�����Ɗ֘A�Â��邱�ƂŁA�ꎞ�I�ȃC���X�^���X��
- <emphasis>�i�����(persistent)</emphasis> �ɂł��܂��B
+ 新しくインスタンス化された永続クラスのインスタンスは、 Hibernateでは
+ <emphasis>一時的(transient)</emphasis> と見なされます。
+ 以下のように、セッションと関連づけることで、一時的なインスタンスを
+ <emphasis>永続状態(persistent)</emphasis> にできます。
</para>
@@ -86,18 +88,18 @@
Long generatedId = (Long) sess.save(fritz);]]></programlisting>
<para>
- <literal>Cat</literal> �N���X�̎��ʎq���������������̂ł���A
- <literal>save()</literal> ���Ă��Ƃ��ɁA ���ʎq����������A <literal>cat</literal>
- �C���X�^���X�Ɋ��蓖�Ă��܂��B <literal>Cat</literal>
- �̎��ʎq�������犄�蓖�Ă���i <literal>assigned</literal> ���ʎq���j���A�����L�[�ł���Ȃ�A
- <literal>save()</literal> ��Ăяo���O�ɁA���ʎq���蓖�ĂȂ���Ȃ�܂���B
- <literal>save()</literal> �̑���ɁAEJB3 �̏����h���t�g�Œ�`���ꂽ
- <literal>persist()</literal> ��g�����Ƃ�\�ł��B
+ <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> を使うことも可能です。
</para>
<para>
- ����ɁA���ʎq������ɂƂ� <literal>save()</literal>
- ���\�b�h��g���āA ���ʎq���蓖�Ă邱�Ƃ�ł��܂��B
+ 代わりに、識別子を引数にとる <literal>save()</literal>
+ メソッドを使って、 識別子を割り当てることもできます。
</para>
@@ -110,29 +112,29 @@
sess.save( pk, new Long(1234) );]]></programlisting>
<para>
- �i��������I�u�W�F�N�g���֘A�I�u�W�F�N�g�����Ă���ꍇ �i�Ⴆ�A�O�̗�ɂ�����
- <literal>kittens</literal> �R���N�V�����̂悤�Ɂj�A �O���L�[�J�����ɁA <literal>NOT
- NULL</literal> �������Ȃ�����́A �����̈�A�̃I�u�W�F�N�g��ǂ�ȏ��Ԃʼni�������Ă���܂��܂���B
- �O���L�[�����ᔽ���鋰��͂���܂���B �������A <literal>NOT NULL</literal>
- ������ꍇ�A�Ԉ�������ԂŃI�u�W�F�N�g�� <literal>save()</literal> ���Ă��܂��ƁA
- ����Ɉᔽ���邩�����܂���B </para>
+ 永続化するオブジェクトが関連オブジェクトを持っている場合 (例えば、前の例における
+ <literal>kittens</literal> コレクションのように)、 外部キーカラムに、 <literal>NOT
+ NULL</literal> 制約をつけない限りは、 これらの一連のオブジェクトをどんな順番で永続化してもかまいません。
+ 外部キー制約を違反する恐れはありません。 しかし、 <literal>NOT NULL</literal>
+ 制約がある場合、間違った順番でオブジェクトを <literal>save()</literal> してしまうと、
+ 制約に違反するかもしれません。 </para>
<para>
- �֘A����I�u�W�F�N�g�����I�ɕۑ�����A Hibernate�� <emphasis>�J�ړI�ȉi����(transitive
- persistence)</emphasis> �@�\�� �g�����Ȃ�A���̂悤�ȏڍׂ�C�ɂ���K�v�͂���܂���B
- �����āA <literal>NOT NULL</literal> ����̈ᔽ����N����܂���B
- Hibernate�����ׂĖʓ|��݂Ă���܂��B�J�ړI�ȉi�����́A���̏͂̌㔼�ɏ�����Ă��܂��B </para>
+ 関連するオブジェクトを自動的に保存する、 Hibernateの <emphasis>遷移的な永続化(transitive
+ persistence)</emphasis> 機能を 使うつもりならば、そのような詳細を気にする必要はありません。
+ そして、 <literal>NOT NULL</literal> 制約の違反すら起こりません。
+ Hibernateがすべて面倒をみてくれます。遷移的な永続化は、この章の後半に書かれています。 </para>
</sect1>
<sect1 id="objectstate-loading">
- <title>�I�u�W�F�N�g�̃��[�h</title>
+ <title>オブジェクトのロード</title>
<para>
- �i�������ꂽ�C���X�^���X�̎��ʎq�����炩���ߕ������Ă���Ȃ�A <literal>Session</literal> ��
- <literal>load()</literal> ���\�b�h��g���āA�����ł��܂��B <literal>load()</literal>
- �́AClass �I�u�W�F�N�g������ɂƂ�A ���̃N���X�̃C���X�^���X��V���ɐ������A��Ԃ��[�h���܂��B
- ���̃C���X�^���X�̏�Ԃ́A�i��(persistent)��Ԃł��B </para>
+ 永続化されたインスタンスの識別子があらかじめ分かっているなら、 <literal>Session</literal> の
+ <literal>load()</literal> メソッドを使って、復元できます。 <literal>load()</literal>
+ は、Class オブジェクトを引数にとり、 そのクラスのインスタンスを新たに生成し、状態をロードします。
+ そのインスタンスの状態は、永続(persistent)状態です。 </para>
<programlisting><![CDATA[Cat fritz = (Cat) sess.load(Cat.class, generatedId);]]></programlisting>
@@ -142,7 +144,7 @@
long id = 1234;
DomesticCat pk = (DomesticCat) sess.load( DomesticCat.class, new Long(id) );]]></programlisting>
<para>
- ���邢�́A�ȉ��̂悤�ɁA�����̃C���X�^���X�ɏ�Ԃ��[�h���邱�Ƃ�ł��܂��B </para>
+ あるいは、以下のように、既存のインスタンスに状態をロードすることもできます。 </para>
<programlisting><![CDATA[Cat cat = new DomesticCat();
@@ -151,16 +153,16 @@
Set kittens = cat.getKittens();]]></programlisting>
<para>
- DB�ɊY������s�������ꍇ�A <literal>load()</literal> �͉s�\�ȗ�O�� �����邱�Ƃɒ��ӂ��܂��傤�B
- ���̃N���X���v���L�V��g���ă}�b�s���O����Ă���ꍇ�A <literal>load()</literal>
- �͏���������Ă��Ȃ��v���L�V��Ԃ��A�v���L�V�̃��\�b�h���Ă��܂Ŏ��ۂɂ� �f�[�^�x�[�X�ɃA�N�Z�X���܂���B
- ����A���ۂɃf�[�^�x�[�X���烍�[�h�����ɁA�I�u�W�F�N�g�ɑ���֘A���肽���ꍇ�A ���̐U�镑���͂ƂĂ�𗧂��܂��B
- <literal>batch-size</literal> ���N���X�}�b�s���O�ɒ�`����Ă���Ȃ�A
- �����̃C���X�^���X��ꊇ�Ń��[�h���邱�Ƃ��\�ł��B </para>
+ DBに該当する行が無い場合、 <literal>load()</literal> は回復不可能な例外を 投げることに注意しましょう。
+ そのクラスがプロキシを使ってマッピングされている場合、 <literal>load()</literal>
+ は初期化されていないプロキシを返し、プロキシのメソッドが呼ばれるまで実際には データベースにアクセスしません。
+ もし、実際にデータベースからロードせずに、オブジェクトに対する関連を作りたい場合、 この振る舞いはとても役立ちます。
+ <literal>batch-size</literal> がクラスマッピングに定義されているならば、
+ 複数のインスタンスを一括でロードすることが可能です。 </para>
<para>
- �Y������s�����݂��邱�Ƃ�m�M�ł��Ȃ��ꍇ�́A <literal>get()</literal> ���\�b�h��g���ׂ��ł��B
- ����́A�f�[�^�x�[�X�ɂ����ɃA�N�Z�X���A�Y������s�������ꍇ��null��Ԃ��܂��B </para>
+ 該当する行が存在することを確信できない場合は、 <literal>get()</literal> メソッドを使うべきです。
+ それは、データベースにすぐにアクセスし、該当する行が無い場合はnullを返します。 </para>
<programlisting><![CDATA[Cat cat = (Cat) sess.get(Cat.class, id);
@@ -171,53 +173,53 @@
return cat;]]></programlisting>
<para>
- <literal>LockMode</literal> ��g���A
- <literal>SELECT ... FOR UPDATE</literal>�Ƃ���SQL�� �g���ăI�u�W�F�N�g���[�h���邱�Ƃ��ł��܂��B
- �ڍׂȏ��́AAPI�h�L�������g��Q�Ƃ��Ă��������B </para>
+ <literal>LockMode</literal> を使えば、
+ <literal>SELECT ... FOR UPDATE</literal>というSQLを 使ってオブジェクトをロードすることができます。
+ 詳細な情報は、APIドキュメントを参照してください。 </para>
<programlisting><![CDATA[Cat cat = (Cat) sess.get(Cat.class, id, LockMode.UPGRADE);]]></programlisting>
<para>
- �֘A�ɑ���J�X�P�[�h���@�Ƃ���
- <literal>lock</literal> �� <literal>all</literal> ��
- �w�肵�Ȃ�����A�֘A����C���X�^���X��܂܂��R���N�V������ <literal>FOR UPDATE</literal> �ŕ���
- <emphasis>����Ȃ�</emphasis> ���Ƃɒ��ӂ��܂��傤�B </para>
+ 関連に対するカスケード方法として
+ <literal>lock</literal> や <literal>all</literal> を
+ 指定しない限り、関連するインスタンスや含まれるコレクションは <literal>FOR UPDATE</literal> で復元
+ <emphasis>されない</emphasis> ことに注意しましょう。 </para>
<para>
- <literal>refresh()</literal> ���\�b�h��g�����ƂŁA�ǂ�ȂƂ��ł�A�I�u�W�F�N�g�₻�̃R���N�V������
- �����[�h���邱�Ƃ��ł��܂��B �f�[�^�x�[�X�̃g���K���e�[�u����X�V�����ۂɁA
- ���̃e�[�u���ɑΉ�����I�u�W�F�N�g�̃v���p�e�B������ꍇ�A���̃��\�b�h����ɗ����܂��B </para>
+ <literal>refresh()</literal> メソッドを使うことで、どんなときでも、オブジェクトやそのコレクションを
+ リロードすることができます。 データベースのトリガがテーブルを更新した際に、
+ そのテーブルに対応するオブジェクトのプロパティを同期する場合、このメソッドが役に立ちます。 </para>
<programlisting><![CDATA[sess.save(cat);
sess.flush(); //force the SQL INSERT
sess.refresh(cat); //re-read the state (after the trigger executes)]]></programlisting>
<para>
- ��Ȗ��́A������̓_�Ɋւ����̂ł��B����́AHibernate���f�[�^�x�[�X����A
- �ǂ̂��炢�̗ʂ�����̂��ƁA�ǂ̂��炢�̐���SQL�� <literal>SELECT</literal> �����g����̂��ł��B
- ����́A <emphasis>�t�F�b�`�̐헪</emphasis> �ɂ��܂��B����ɂ��ẮA<xref linkend="performance-fetching"/> �Ő�����Ă��܂��B </para>
+ 大切な問題は、いつも次の点に関するものです。それは、Hibernateがデータベースから、
+ どのくらいの量を復元するのかと、どのくらいの数のSQLの <literal>SELECT</literal> 文が使われるのかです。
+ これは、 <emphasis>フェッチの戦略</emphasis> によります。これについては、<xref linkend="performance-fetching"/> で説明しています。 </para>
</sect1>
<sect1 id="objectstate-querying" revision="1">
- <title>�N�G��</title>
+ <title>クエリ</title>
<para>
- �T�������I�u�W�F�N�g�̎��ʎq��������Ȃ��ꍇ�́A�N�G�����K�v�ɂȂ�܂��B
- Hibernate�͎g���₷���ċ��͂ȃI�u�W�F�N�g�w���̃N�G������ (HQL)��T�|�[�g���Ă��܂��B
- �v���O�����ɂ���ăN�G�����쐬�ł���悤�ɁAHibernate�͐�����ꂽCriteria��Example�N�G���@�\(QBC��QBE�j��
- �T�|�[�g���Ă��܂��BResultSet��I�u�W�F�N�g�ɕϊ�����Hibernate�̃I�v�V�����@�\��g�����ƂŁA
- �f�[�^�x�[�X�̃l�C�e�B�u��SQL�ŃN�G����\�����邱�Ƃ�ł��܂��B </para>
+ 探したいオブジェクトの識別子が分からない場合は、クエリが必要になります。
+ Hibernateは使いやすくて強力なオブジェクト指向のクエリ言語 (HQL)をサポートしています。
+ プログラムによってクエリが作成できるように、Hibernateは洗練されたCriteriaとExampleクエリ機能(QBCとQBE)を
+ サポートしています。ResultSetをオブジェクトに変換するHibernateのオプション機能を使うことで、
+ データベースのネイティブなSQLでクエリを表現することもできます。 </para>
<sect2 id="objectstate-querying-executing" revision="1">
- <title>�N�G���̎��s</title>
+ <title>クエリの実行</title>
<para>
- HQL��l�C�e�B�u��SQL�N�G���́A <literal>org.hibernate.Query</literal>
- �̃C���X�^���X�Ƃ��ĕ\������܂��B ���̃C���^�t�F�[�X�́A�p�����[�^�o�C���f�B���O��ResultSet�̃n���h�����O��
- �N�G���̎��s��s�����\�b�h��p�ӂ��Ă��܂��B �ʏ�A <literal>Query</literal> �́A�ȉ��Ɏ����悤�ɁA
- ���̎��_�� <literal>Session</literal> ��g���Ď擾���܂��B </para>
+ HQLやネイティブなSQLクエリは、 <literal>org.hibernate.Query</literal>
+ のインスタンスとして表現されます。 このインタフェースは、パラメータバインディングやResultSetのハンドリングや
+ クエリの実行を行うメソッドを用意しています。 通常、 <literal>Query</literal> は、以下に示すように、
+ その時点の <literal>Session</literal> を使って取得します。 </para>
<programlisting><![CDATA[List cats = session.createQuery(
@@ -247,27 +249,27 @@
]]></programlisting>
<para>
- �N�G���́A���ʁA <literal>list()</literal> ��Ăяo�����Ƃɂ���Ď��s����܂��B
- �N�G���̌��ʂ́A��������ɂ���R���N�V�����ɂ��ׂă��[�h����܂��B
- �N�G���ɂ���ĕ������ꂽ�G���e�B�e�B�̃C���X�^���X�́A�i����Ԃł��B
- ����A�N�G����������1�̃C���X�^���X��Ԃ��ƕ������Ă���Ȃ�A
- <literal>uniqueResult()</literal> ���\�b�h�������葁�����@�ł��B
- �����t�F�b�`�𗘗p�����N�G���̏ꍇ�A�ӂ��A����ꂽ�R���N�V�����ɂ́A
- ���[�g�̃I�u�W�F�N�g���d�����Ċ܂܂�Ă��܂�
- �i�������A���[�g�����R���N�V�����͏�����(���[�h�j����Ă��܂��j�B
- ���̏d���� <literal>Set</literal> ��g���Ď�菜�����Ƃ��ł��܂��B</para>
+ クエリは、普通、 <literal>list()</literal> を呼び出すことによって実行されます。
+ クエリの結果は、メモリ上にあるコレクションにすべてロードされます。
+ クエリによって復元されたエンティティのインスタンスは、永続状態です。
+ もし、クエリがたった1個のインスタンスを返すと分かっているなら、
+ <literal>uniqueResult()</literal> メソッドが手っ取り早い方法です。
+ 即時フェッチを利用したクエリの場合、ふつう、得られたコレクションには、
+ ルートのオブジェクトが重複して含まれています
+ (しかし、ルートが持つコレクションは初期化(ロード)されています)。
+ この重複は <literal>Set</literal> を使って取り除くことができます。</para>
<sect3 id="objectstate-querying-executing-iterate">
- <title>���ʂ�C�e���[�g����</title>
+ <title>結果をイテレートする</title>
<para>
- ���X�A <literal>iterate()</literal> ���\�b�h��g���ăN�G������s���邱�ƂŁA
- ���ǂ��p�t�H�[�}���X�邱�Ƃ��ł��܂��B ����́A�ʏ�A�N�G���ɂ���ē���ꂽ���ۂ̃G���e�B�e�B�̃C���X�^���X���A
- ���łɃZ�b�V�����܂��͓L���b�V���ɑ��݂��邱�Ƃ����҂ł���ꍇ�����ł��B
- ����炪�A�܂��L���b�V������Ă��Ȃ��Ȃ�A <literal>iterate()</literal> �́A
- <literal>list()</literal> ����x���A�ȒP�ȃN�G���ɑ��Ă�����̃f�[�^�x�[�X�A�N�Z�X��
- �K�v�Ƃ��܂��B���̃A�N�Z�X�Ƃ́A���ʎq������擾���邽�߂̍ŏ���select�P��ƁA
- ���ۂ̃C���X�^���X���������邽�߂Ɍォ��s��n���select�̂��Ƃł��B </para>
+ 時々、 <literal>iterate()</literal> メソッドを使ってクエリを実行することで、
+ より良いパフォーマンスを得ることができます。 これは、通常、クエリによって得られた実際のエンティティのインスタンスが、
+ すでにセッションまたは二次キャッシュに存在することが期待できる場合だけです。
+ それらが、まだキャッシュされていないなら、 <literal>iterate()</literal> は、
+ <literal>list()</literal> よりも遅く、簡単なクエリに対しても多くのデータベースアクセスを
+ 必要とします。そのアクセスとは、識別子だけを取得するための最初のselect1回と、
+ 実際のインスタンスを初期化するために後から行うn回のselectのことです。 </para>
<programlisting><![CDATA[// fetch ids
@@ -285,9 +287,9 @@
</sect3>
<sect3 id="objectstate-querying-executing-tuples">
- <title>�I�u�W�F�N�g�̑g�ituple�j��Ԃ��N�G��</title>
+ <title>オブジェクトの組(tuple)を返すクエリ</title>
<para>
- Hibernate�̃N�G���ł́A���X�A�I�u�W�F�N�g�̑g��Ԃ����Ƃ�����܂��B ���̏ꍇ�́A�e�^�v���͔z��Ƃ��ĕԂ���܂��B
+ Hibernateのクエリでは、時々、オブジェクトの組を返すことがあります。 その場合は、各タプルは配列として返されます。
</para>
@@ -306,12 +308,12 @@
</sect3>
<sect3 id="objectstate-querying-executing-scalar" revision="1">
- <title>�X�J���[�̌���</title>
+ <title>スカラーの結果</title>
<para>
- �N�G���ł́A <literal>select</literal> �߂ŃN���X�̃v���p�e�B��w��ł��܂��B
- SQL�̏W������ĂԂ��Ƃ�ł��܂��B�v���p�e�B��W�����́A
- �i�i����Ԃ̃G���e�B�e�B�ł͂Ȃ��j�u�X�J���[�l�v�ł���ƌ��Ȃ���܂��B </para>
+ クエリでは、 <literal>select</literal> 節でクラスのプロパティを指定できます。
+ SQLの集合関数を呼ぶこともできます。プロパティや集合関数は、
+ (永続状態のエンティティではなく)「スカラー値」であると見なされます。 </para>
<programlisting><![CDATA[Iterator results = sess.createQuery(
@@ -331,25 +333,25 @@
</sect3>
<sect3 id="objectstate-querying-executing-parameters">
- <title>�p�����[�^�̃o�C���h</title>
+ <title>パラメータのバインド</title>
<para>
<literal>Query</literal>
- �́A���O�t���̃p�����[�^��JDBC�X�^�C���� <literal>?</literal>
- �p�����[�^�ɒl��o�C���h���邽�߂̃��\�b�h�����Ă��܂��B
- <emphasis>JDBC�Ƃ͈Ⴂ�AHibernate�̓p�����[�^�Ƀ[������ԍ���U���Ă����܂��B</emphasis>
- ���O�t���̃p�����[�^�Ƃ́A�N�G��������̂Ȃ��ɂ��� <literal>:name</literal> �`���̎��ʎq�ł��B
- ���O�t���p�����[�^�̗��_�͎��̒ʂ�ł��B </para>
+ は、名前付きのパラメータやJDBCスタイルの <literal>?</literal>
+ パラメータに値をバインドするためのメソッドを持っています。
+ <emphasis>JDBCとは違い、Hibernateはパラメータにゼロから番号を振っていきます。</emphasis>
+ 名前付きのパラメータとは、クエリ文字列のなかにある <literal>:name</literal> 形式の識別子です。
+ 名前付きパラメータの利点は次の通りです。 </para>
<itemizedlist spacing="compact">
<listitem>
- <para> ���O�t���p�����[�^�́A�N�G��������ɓo�ꂷ�鏇�ԂƖ��W�ł� </para>
+ <para> 名前付きパラメータは、クエリ文字列に登場する順番と無関係です </para>
</listitem>
<listitem>
- <para> �����N�G����ɕ�����o�ꂷ�邱�Ƃ��ł��܂� </para>
+ <para> 同じクエリ内に複数回登場することができます </para>
</listitem>
<listitem>
- <para> �������g�������܂� </para>
+ <para> 自分自身を説明します </para>
</listitem>
</itemizedlist>
@@ -377,12 +379,12 @@
</sect3>
<sect3 id="objectstate-querying-executing-pagination">
- <title>�y�[�W����
+ <title>ページ分け
</title>
<para>
- ResultSet�ɐ����i�����������ő�s���╜���������ŏ��̍s�j�������K�v������A
- �ȉ��̂悤�ɁA <literal>Query</literal> �C���^�[�t�F�C�X�̃��\�b�h��g���܂��B </para>
+ ResultSetに制限(復元したい最大行数や復元したい最初の行)を加える必要があれば、
+ 以下のように、 <literal>Query</literal> インターフェイスのメソッドを使います。 </para>
<programlisting><![CDATA[Query q = sess.createQuery("from DomesticCat cat");
@@ -390,19 +392,19 @@
q.setMaxResults(10);
List cats = q.list();]]></programlisting>
- <para> �����t���̃N�G����DBMS�̃l�C�e�B�u��SQL�ɕϊ�������@��AHibernate�͒m���Ă��܂��B
+ <para> 制限付きのクエリをDBMSのネイティブなSQLに変換する方法を、Hibernateは知っています。
</para>
</sect3>
<sect3 id="objectstate-querying-executing-scrolling">
- <title>�X�N���[���\�ȃC�e���[�V����</title>
+ <title>スクロール可能なイテレーション</title>
<para>
- JDBC�h���C�o���X�N���[���\�� <literal>ResultSet</literal> ��T�|�[�g������A
+ JDBCドライバがスクロール可能な <literal>ResultSet</literal> をサポートしていれば、
<literal>Query</literal>
- �C���^�[�t�F�C�X��g���āA <literal>ScrollableResults</literal> �I�u�W�F�N�g��
- �擾�ł��܂��B�����g���ƁA�N�G���̌��ʂɑ��ď_��Ƀi�r�Q�[�V�����ł��܂��B </para>
+ インターフェイスを使って、 <literal>ScrollableResults</literal> オブジェクトを
+ 取得できます。それを使うと、クエリの結果に対して柔軟にナビゲーションできます。 </para>
<programlisting><![CDATA[Query q = sess.createQuery("select cat.name, cat from DomesticCat cat " +
@@ -428,19 +430,19 @@
cats.close()]]></programlisting>
<para>
- ���̋@�\�ɂ̓I�[�v����Ԃ̃f�[�^�x�[�X�R�l�N�V�������K�v�ł��邱�Ƃɒ��ӂ��Ă��������B
- ����A�I�t���C���̃y�[�W�����@�\���K�v�ł���A <literal>setMaxResult()</literal> /
- <literal>setFirstResult()</literal> ��g���܂��傤�B </para>
+ この機能にはオープン状態のデータベースコネクションが必要であることに注意してください。
+ もし、オフラインのページ分け機能が必要であれば、 <literal>setMaxResult()</literal> /
+ <literal>setFirstResult()</literal> を使いましょう。 </para>
</sect3>
<sect3 id="objectstate-querying-executing-named" revision="1">
- <title>���O�t���N�G���̊O�o��</title>
+ <title>名前付きクエリの外出し</title>
<para>
- �}�b�s���O�h�L�������g�ɖ��O�t���̃N�G�����`���邱�Ƃ��ł��܂��B
- �i�}�[�N�A�b�v�Ɖ�߂���镶�����N�G���Ɋ܂܂��Ȃ�A <literal>CDATA</literal> �Z�N�V������
- �g�����Ƃ�Y��Ȃ��悤�ɂ��܂��傤�B�j </para>
+ マッピングドキュメントに名前付きのクエリを定義することができます。
+ (マークアップと解釈される文字がクエリに含まれるなら、 <literal>CDATA</literal> セクションを
+ 使うことを忘れないようにしましょう。) </para>
<programlisting><![CDATA[<query name="ByNameAndMaximumWeight"><![CDATA[
@@ -449,7 +451,7 @@
and cat.weight > ?
] ]></query>]]></programlisting>
- <para>�p�����[�^�̃o�C���f�B���O�Ǝ��s�́A�ȉ��̂悤�ȃv���O�����ōs���܂��B </para>
+ <para>パラメータのバインディングと実行は、以下のようなプログラムで行われます。 </para>
<programlisting><![CDATA[Query q = sess.getNamedQuery("ByNameAndMaximumWeight");
@@ -457,23 +459,23 @@
q.setInt(1, minWeight);
List cats = q.list();]]></programlisting>
- <para> ���ۂ̃v���O�����R�[�h�́A�g����N�G������Ɉˑ����Ă��Ȃ����Ƃɒ��ӂ��܂��傤�B
- ���^�f�[�^�ɂ́A�l�C�e�B�uSQL�N�G�����`���邱�Ƃ�ł��܂��B �܂��A�����̃N�G����}�b�s���O�t�@�C���Ɉڂ����ƂŁA
- Hibernate�Ɉڍs���邱�Ƃ�ł��܂��B </para>
+ <para> 実際のプログラムコードは、使われるクエリ言語に依存していないことに注意しましょう。
+ メタデータには、ネイティブSQLクエリを定義することもできます。 また、既存のクエリをマッピングファイルに移すことで、
+ Hibernateに移行することもできます。 </para>
<para>
- <literal><hibernate-mapping></literal> �̒��̃N�G����`�́A�N�G���ɑ���
- ���j�[�N�Ȗ��O���K�v�Ȃ��Ƃɂ���ӂ��Ă��������B����ɑ��āA <literal><class></literal> �̒���
- �N�G����`�́A�N���X�̊��S���薼���O�ɕt������̂ŁA�����I�Ƀ��j�[�N�Ȗ��O�ɂȂ�܂��B
- ��F <literal>eg.Cat.ByNameAndMaximumWeight</literal>
+ <literal><hibernate-mapping></literal> の中のクエリ定義は、クエリに対する
+ ユニークな名前が必要なことにも注意してください。それに対して、 <literal><class></literal> の中の
+ クエリ定義は、クラスの完全限定名が前に付けられるので、自動的にユニークな名前になります。
+ 例: <literal>eg.Cat.ByNameAndMaximumWeight</literal>
</para>
</sect3>
</sect2>
<sect2 id="objectstate-filtering" revision="1">
- <title>�R���N�V�����̃t�B���^�����O</title>
- <para> �R���N�V���� <emphasis>�t�B���^</emphasis> �́A�i��������Ă���R���N�V������z��ɓK�p�����
- ����ȃ^�C�v�̃N�G���ł��B���̃N�G��������ł́A�R���N�V�����̂��̎��_�ł̗v�f��Ӗ�����
- <literal>this</literal> ��g���܂��B </para>
+ <title>コレクションのフィルタリング</title>
+ <para> コレクション <emphasis>フィルタ</emphasis> は、永続化されているコレクションや配列に適用される
+ 特殊なタイプのクエリです。そのクエリ文字列では、コレクションのその時点での要素を意味する
+ <literal>this</literal> を使います。 </para>
<programlisting><![CDATA[Collection blackKittens = session.createFilter(
@@ -483,12 +485,12 @@
.list()
);]]></programlisting>
- <para> �Ԃ����R���N�V������Bag�Ƃ݂Ȃ���܂��B�����āA����͂�Ƃ̃R���N�V�����̃R�s�[�ɂȂ�܂��B
- ���̃R���N�V�����͏C������܂���i����́A"filter"�Ƃ������O�̈Ӗ��Ƃ͈قȂ�܂����A ���҂���铮���Ƃ͈�v���Ă��܂��j�B
+ <para> 返されるコレクションはBagとみなされます。そして、それはもとのコレクションのコピーになります。
+ 元のコレクションは修正されません(これは、"filter"という名前の意味とは異なりますが、 期待される動きとは一致しています)。
</para>
- <para> �t�B���^�ɂ� <literal>from</literal>
- �߂��s�v�ł��邱�ƂɋC�Â��ł��傤�i�K�v�Ȃ�A�����Ƃ�\�ł����j�B �t�B���^�́A�R���N�V�����̗v�f���̂�Ԃ��č\���܂���B
+ <para> フィルタには <literal>from</literal>
+ 節が不要であることに気づくでしょう(必要なら、持つことも可能ですが)。 フィルタは、コレクションの要素自体を返して構いません。
</para>
@@ -497,8 +499,8 @@
"select this.mate where this.color = eg.Color.BLACK.intValue")
.list();]]></programlisting>
- <para> �N�G����܂܂Ȃ��t�B���^���ɗ����܂��B
- �Ⴆ�A���ɑ傫�ȃR���N�V�����̕����W�����[�h���邽�߂Ɏg���܂��B </para>
+ <para> クエリを含まないフィルタも役に立ちます。
+ 例えば、非常に大きなコレクションの部分集合をロードするために使えます。 </para>
<programlisting><![CDATA[Collection tenKittens = session.createFilter(
@@ -509,11 +511,11 @@
</sect2>
<sect2 id="objecstate-querying-criteria" revision="1">
- <title>�N���C�e���A�̃N�G��</title>
+ <title>クライテリアのクエリ</title>
- <para> HQL�͔��ɋ��͂ł����A�N�G��������������A�I�u�W�F�N�g�w����API��g����
- ���I�ɃN�G���������D�ފJ���҂���܂��B �����������ꍇ�̂��߂ɁAHibernate�͒����I��
- <literal>Criteria</literal> �N�G��API����Ă��܂��B </para>
+ <para> HQLは非常に強力ですが、クエリ文字列を作るよりも、オブジェクト指向のAPIを使って
+ 動的にクエリを作る方を好む開発者もいます。 こういった場合のために、Hibernateは直感的な
+ <literal>Criteria</literal> クエリAPIを提供しています。 </para>
<programlisting><![CDATA[Criteria crit = session.createCriteria(Cat.class);
@@ -521,21 +523,21 @@
crit.setMaxResults(10);
List cats = crit.list();]]></programlisting>
- <para> <literal>Criteria</literal> ��
- <literal>Example</literal> API�̏ڍׂ́A <xref linkend="querycriteria"/>
- �ɏq�ׂ��Ă��܂��B </para>
+ <para> <literal>Criteria</literal> と
+ <literal>Example</literal> APIの詳細は、 <xref linkend="querycriteria"/>
+ に述べられています。 </para>
</sect2>
<sect2 id="objectstate-querying-nativesql" revision="2">
- <title>�l�C�e�B�uSQL�̃N�G��</title>
+ <title>ネイティブSQLのクエリ</title>
<para>
- <literal>createSQLQuery()</literal> ��g���āASQL�ŃN�G����\�����邱�Ƃ�ł��܂��B
- �����āAHibernate�ɁAResultSet ����I�u�W�F�N�g�ւ̃}�b�s���O��܂����܂��B
- <literal>session.connection()</literal> ��Ăׂǂ�ȂƂ��ł�A���ځAJDBC
- <literal>Connection</literal> ��g�p�ł��邱�Ƃ�o���Ă����܂��傤�B ����AHibernate
- API��g���̂ł���A���L�̂悤��SQL�̕ʖ����ʂł�����Ȃ���Ȃ�܂���B </para>
+ <literal>createSQLQuery()</literal> を使って、SQLでクエリを表現することもできます。
+ そして、Hibernateに、ResultSet からオブジェクトへのマッピングをまかせます。
+ <literal>session.connection()</literal> を呼べばどんなときでも、直接、JDBC
+ <literal>Connection</literal> を使用できることを覚えておきましょう。 もし、Hibernate
+ APIを使うのであれば、下記のようにSQLの別名を括弧でくくらなければなりません。 </para>
<programlisting><![CDATA[List cats = session.createSQLQuery("SELECT {cat.*} FROM CAT {cat} WHERE ROWNUM<10")
.addEntity("cat", Cat.class)
@@ -549,27 +551,27 @@
.list()]]></programlisting>
<para>
- SQL�N�G���́AHibernate�N�G���Ɠ����悤�ɁA���O�t���̃p�����[�^�ƈʒu�p�����[�^�����Ƃ��ł��܂��B
- Hibernate�ɂ�����l�C�e�B�u��SQL�N�G���̏ڍׂɂ��ẮA <xref linkend="querysql"/>
- ��Q�Ƃ��Ă��������B </para>
+ SQLクエリは、Hibernateクエリと同じように、名前付きのパラメータと位置パラメータを持つことができます。
+ HibernateにおけるネイティブなSQLクエリの詳細については、 <xref linkend="querysql"/>
+ を参照してください。 </para>
</sect2>
</sect1>
<sect1 id="objectstate-modifying" revision="1">
- <title>�i���I�u�W�F�N�g�̏C��</title>
+ <title>永続オブジェクトの修正</title>
<para>
- <emphasis>�������̉i���C���X�^���X</emphasis>
- �i��F <literal>Session</literal> �ɂ���āA
- ���[�h�A�Z�[�u�A�쐬�A�N�G�����ꂽ�I�u�W�F�N�g�j�́A�A�v���P�[�V�����ɑ��삳��܂��B
- ���̍ۂɕύX���ꂽ�i����Ԃ́A <literal>Session</literal> �� <emphasis>�t���b�V��</emphasis>
- �����Ƃ��ɁA�i��������܂��i����́A���̏͂̌㔼�ŏq�ׂĂ��܂��j�B
- �ύX��i�������邽�߂ɁA����ȃ��\�b�h�i <literal>update()</literal>
- �̂悤�Ȃ�́B����́A�ʂ̖ړI�Ŏg�p���܂��j�� �ĂԕK�v�͂���܂���B �I�u�W�F�N�g�̏�Ԃ�X�V�����ԊȒP�ȕ��@�́A�I�u�W�F�N�g��
- <literal>load()</literal> ���A <literal>Session</literal>
- ��I�[�v���ɂ��Ă���ԂɁA���ڑ��삷�邱�Ƃł��B </para>
+ <emphasis>処理中の永続インスタンス</emphasis>
+ (例: <literal>Session</literal> によって、
+ ロード、セーブ、作成、クエリされたオブジェクト)は、アプリケーションに操作されます。
+ その際に変更された永続状態は、 <literal>Session</literal> が <emphasis>フラッシュ</emphasis>
+ されるときに、永続化されます(これは、この章の後半で述べています)。
+ 変更を永続化するために、特殊なメソッド( <literal>update()</literal>
+ のようなもの。これは、別の目的で使用します)を 呼ぶ必要はありません。 オブジェクトの状態を更新する一番簡単な方法は、オブジェクトを
+ <literal>load()</literal> し、 <literal>Session</literal>
+ をオープンにしている間に、直接操作することです。 </para>
<programlisting><![CDATA[DomesticCat cat = (DomesticCat) sess.load( Cat.class, new Long(69) );
@@ -578,40 +580,40 @@
]]></programlisting>
<para>
- �i�I�u�W�F�N�g���[�h���邽�߂́jSQL�� <literal>SELECT</literal> �Ɓi�X�V���ꂽ��Ԃ�i�������邽�߂́j
- SQL�� <literal>UPDATE</literal> �������Z�b�V�����ŕK�v�ƂȂ�̂ŁA���̃v���O���~���O���f���́A
- �����������Ȃ�ꍇ������܂��B
- ���̂��߁AHibernate�͕ʂ̕��@��p�ӂ��Ă��܂��B����́A�C���X�^���X������idetached�j���@�ł��B </para>
+ (オブジェクトをロードするための)SQLの <literal>SELECT</literal> と(更新された状態を永続化するための)
+ SQLの <literal>UPDATE</literal> が同じセッションで必要となるので、このプログラミングモデルは、
+ 効率が悪くなる場合があります。
+ そのため、Hibernateは別の方法を用意しています。それは、インスタンスを分離する(detached)方法です。 </para>
<para>
- <emphasis>Hibernate�́A <literal>UPDATE</literal> ����
- <literal>DELETE</literal> ���ڎ��s����API��p�ӂ��Ă��܂���B
- Hibernate�́A <emphasis>��ԊǗ�</emphasis> �T�[�r�X�ł���A�g����SQL
- <emphasis>��</emphasis> �̂��Ƃ�J���҂��l����K�v�͂���܂���B
- JDBC��SQL������s���銮����API�ł���A <literal>session.connection()</literal>
- ��ĂԂ��Ƃ� ���ł�AJDBC <literal>Connection</literal> ��J���҂͎擾�ł��܂��B
- ����ɁA��ʂ̃f�[�^����̍l�����́A�I�����C���g�����U�N�V�������������A�v���P�[�V������
- �I�u�W�F�N�g/�����[�V���i���}�b�s���O�ƏՓ˂��܂��B
- �������AHibernate�̍���̃o�[�W�����ł́A��ʃf�[�^����������ʂȋ@�\����邩�����܂���B
- �o�b�`����ɗ��p�ł��邢�����̍H�v�ɂ��ẮA <xref linkend="batch"/> ��Q�Ƃ��Ă��������B </emphasis>
+ <emphasis>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"/> を参照してください。 </emphasis>
</para>
</sect1>
<sect1 id="objectstate-detached" revision="2">
- <title>�����I�u�W�F�N�g�̏C��</title>
+ <title>分離オブジェクトの修正</title>
<para>
- �����̃A�v���P�[�V�����ł͎��̂��Ƃ��K�v�ɂȂ�܂��B
- ����́A����g�����U�N�V�����ŃI�u�W�F�N�g�����A���삷�邽�߂ɂ����UI�w�ɑ���A
- ���̌�ɁA�V�����g�����U�N�V�����ŕύX��Z�[�u����Ƃ��������Ƃł��B
- ���s���̍������ŁA���̃^�C�v�̃A�v���[�`��g���A�v���P�[�V�����ł́A "���Ԃ̒���"
- ��ƒP�ʂ̊u������ۏ��邽�߂ɁA�o�[�W�����f�[�^���ʏ�g���܂��B </para>
+ 多くのアプリケーションでは次のことが必要になります。
+ それは、あるトランザクションでオブジェクトを復元し、操作するためにそれをUI層に送り、
+ その後に、新しいトランザクションで変更をセーブするといったことです。
+ 並行性の高い環境で、このタイプのアプローチを使うアプリケーションでは、 "期間の長い"
+ 作業単位の隔離性を保証するために、バージョンデータが通常使われます。 </para>
<para>
- Hibernate�́A <literal>Session.update()</literal> ��
- <literal>Session.merge()</literal> ���\�b�h��
- �g���āA�����C���X�^���X��Ēlj����邱�ƂŁA���̃��f���ɑΉ����܂��B </para>
+ Hibernateは、 <literal>Session.update()</literal> や
+ <literal>Session.merge()</literal> メソッドを
+ 使って、分離インスタンスを再追加することで、このモデルに対応します。 </para>
<programlisting><![CDATA[// in the first session
@@ -627,25 +629,25 @@
secondSession.update(mate); // update mate]]></programlisting>
<para>
- ���ʎq<literal>catId</literal> ���� <literal>Cat</literal> ���A����
- <literal>secondSession</literal> �Ń��[�h����Ă����ꍇ�́A�Ēlj����悤�Ƃ����Ƃ��ɁA��O���������܂��B
+ 識別子<literal>catId</literal> を持つ <literal>Cat</literal> が、既に
+ <literal>secondSession</literal> でロードされていた場合は、再追加しようとしたときに、例外が投げられます。
</para>
<para>
- �������ʎq���i���C���X�^���X��Z�b�V���������ɕێ����Ă��Ȃ����Ƃ�
- �m�M�ł���Ȃ� <literal>update()</literal> ��g���܂��傤�B
- �����āA�Z�b�V�����̏�Ԃ�l�����ɁA�ǂ�ȏꍇ�ł�ύX��}�[�W�������ꍇ�́A <literal>merge()</literal>
- ��g���܂��傤�B ���Ȃ킿�A�����I�u�W�F�N�g�̍Ēlj����삪�A�ŏ��Ɏ��s����邱�Ƃ�m���ɂ��邽�߂ɁA �ʏ��
- <literal>update()</literal> ���V�����Z�b�V�����̂Ȃ��ōŏ��ɌĂ�郁�\�b�h�ɂȂ�܂��B </para>
+ 同じ識別子を持つ永続インスタンスをセッションが既に保持していないことを
+ 確信できるなら <literal>update()</literal> を使いましょう。
+ そして、セッションの状態を考えずに、どんな場合でも変更をマージしたい場合は、 <literal>merge()</literal>
+ を使いましょう。 すなわち、分離オブジェクトの再追加操作が、最初に実行されることを確実にするために、 通常は
+ <literal>update()</literal> が新しいセッションのなかで最初に呼ばれるメソッドになります。 </para>
<para>
- �����C���X�^���X���瓞�B�\�ȁA�����C���X�^���X��A�v���P�[�V�����͌ʂ� <literal>update()</literal>
- ���ׂ��ł��B����́A���̏�Ԃ�X�V�������ꍇ�� <emphasis>����</emphasis> �܂��B
- <emphasis>�J�ړI�ȉi����</emphasis> ��g���A���������ł��܂��B <xref
- linkend="objectstate-transitive"/> ��Q�Ƃ��Ă��������B </para>
+ 分離インスタンスから到達可能な、分離インスタンスをアプリケーションは個別に <literal>update()</literal>
+ すべきです。それは、その状態を更新したい場合に <emphasis>限り</emphasis> ます。
+ <emphasis>遷移的な永続化</emphasis> を使えば、もちろん自動化できます。 <xref
+ linkend="objectstate-transitive"/> を参照してください。 </para>
<para>
- ���\�b�h�ł�܂��A�V�����Z�b�V�����ɃI�u�W�F�N�g��Ċ֘A�t���ł��܂��B �������A�����C���X�^���X�͖��C���łȂ���Ȃ�܂���B
+ メソッドでもまた、新しいセッションにオブジェクトを再関連付けできます。 しかし、分離インスタンスは無修正でなければなりません。
</para>
@@ -657,24 +659,24 @@
sess.lock(pk, LockMode.UPGRADE);]]></programlisting>
<para>
- <literal>lock()</literal> �́A���܂��܂�
- <literal>LockMode</literal> �ƂƂ�Ɏg�����Ƃ��ł��܂��B
- �ڍׂ́AAPI�h�L�������g�ƃg�����U�N�V���������̏͂�Q�Ƃ��Ă��������B
- �Ēlj��̂Ƃ��ɂ����A <literal>lock()</literal> ���g����킯�ł͂���܂���B </para>
+ <literal>lock()</literal> は、さまざまな
+ <literal>LockMode</literal> とともに使うことができます。
+ 詳細は、APIドキュメントとトランザクション処理の章を参照してください。
+ 再追加のときにだけ、 <literal>lock()</literal> が使われるわけではありません。 </para>
<para>
- ���Ԃ̒�����ƒP�ʂ́A���̑��̃��f���́A<xref linked="transactions-optimistic"/> �ŏq�ׂĂ��܂��B </para>
+ 期間の長い作業単位の、その他のモデルは、<xref linked="transactions-optimistic"/> で述べています。 </para>
</sect1>
<sect1 id="objectstate-saveorupdate">
- <title>�����I�ȏ�Ԍ��o</title>
+ <title>自動的な状態検出</title>
<para>
- Hibernate�̃��[�U�͎���2�̃P�[�X�̂ǂ���ɂ�g����ėp�I�ȃ��\�b�h��v�����Ă��܂����B
- ����́A�V�������ʎq�����Ĉꎞ�I�ȃC���X�^���X��Z�[�u���邱�ƂƁA
- ���̎��_�̎��ʎq�Ɗ֘A�Â��Ă��镪���C���X�^���X��X�V/�Ēlj����邱�Ƃ̂ł��郁�\�b�h�ł��B
- <literal>saveOrUpdate()</literal> �͂��̂悤�ȋ@�\������������\�b�h�ł��B </para>
+ Hibernateのユーザは次の2つのケースのどちらにも使える汎用的なメソッドを要求していました。
+ それは、新しい識別子を生成して一時的なインスタンスをセーブすることと、
+ その時点の識別子と関連づいている分離インスタンスを更新/再追加することのできるメソッドです。
+ <literal>saveOrUpdate()</literal> はこのような機能を実現したメソッドです。 </para>
<programlisting><![CDATA[// in the first session
@@ -689,90 +691,90 @@
secondSession.saveOrUpdate(mate); // save the new instance (mate has a null id)]]></programlisting>
<para>
- <literal>saveOrUpdate()</literal> �̎g�p���@�ƈӖ��́A
- �V�������[�U�ɂƂ��č��������������܂���B
- �܂����ɁA����Z�b�V�����Ŏg�p�����C���X�^���X��ʂ̐V�����Z�b�V�����Ŏg�����Ƃ��Ȃ�����A
- <literal>update()</literal> �� <literal>saveOrUpdate()</literal> ��
- <literal>merge()</literal> ��g���K�v�͂���܂���B
- �A�v���P�[�V�����S�̂�ʂ��āA�����̃��\�b�h��S���g��Ȃ����Ƃ����܂��B </para>
+ <literal>saveOrUpdate()</literal> の使用方法と意味は、
+ 新しいユーザにとって混乱を招くかもしれません。
+ まず第一に、あるセッションで使用したインスタンスを別の新しいセッションで使おうとしない限り、
+ <literal>update()</literal> や <literal>saveOrUpdate()</literal> や
+ <literal>merge()</literal> を使う必要はありません。
+ アプリケーション全体を通じて、これらのメソッドを全く使わないこともあります。 </para>
<para>
- �ʏ�A <literal>update()</literal> �� <literal>saveOrUpdate()</literal>
- �͎��̃V�i���I�� �g���܂��B </para>
+ 通常、 <literal>update()</literal> や <literal>saveOrUpdate()</literal>
+ は次のシナリオで 使われます。 </para>
<itemizedlist spacing="compact">
<listitem>
- <para>�A�v���P�[�V�������ŏ��̃Z�b�V�����ŃI�u�W�F�N�g���[�h���܂��B </para>
+ <para>アプリケーションが最初のセッションでオブジェクトをロードします。 </para>
</listitem>
<listitem>
- <para>�I�u�W�F�N�g��UI�w�ɑ����܂��B </para>
+ <para>オブジェクトがUI層に送られます。 </para>
</listitem>
<listitem>
- <para>�I�u�W�F�N�g�ɑ��ĕύX���������܂��B
+ <para>オブジェクトに対して変更が加えられます。
</para>
</listitem>
<listitem>
- <para> �I�u�W�F�N�g���r�W�l�X���W�b�N�w�ɑ����܂��B </para>
+ <para> オブジェクトがビジネスロジック層に送られます。 </para>
</listitem>
<listitem>
<para>
- �A�v���P�[�V�����́A2�Ԗڂ̃Z�b�V������ <literal>update()</literal>
- ��ĂԂ��ƂŁA�����̕ύX��i�������܂��B </para>
+ アプリケーションは、2番目のセッションで <literal>update()</literal>
+ を呼ぶことで、これらの変更を永続化します。 </para>
</listitem>
</itemizedlist>
- <para> <literal>saveOrUpdate()</literal> �͈ȉ��̂��Ƃ�s���܂��B </para>
+ <para> <literal>saveOrUpdate()</literal> は以下のことを行います。 </para>
<itemizedlist spacing="compact">
<listitem>
- <para>�I�u�W�F�N�g�����̃Z�b�V�����ŁA���łɉi��������Ă���A������܂���B </para>
+ <para>オブジェクトがこのセッションで、すでに永続化されていれば、何もしません。 </para>
</listitem>
<listitem>
<para>
- ���̃Z�b�V�����Ɋ֘A�Â��Ă���ʂ̃I�u�W�F�N�g���������ʎq�����Ă���Ȃ�A ��O�𓊂��܂��B </para>
+ そのセッションに関連づいている別のオブジェクトが同じ識別子を持っているなら、 例外を投げます。 </para>
</listitem>
<listitem>
<para>
- �I�u�W�F�N�g�̎��ʎq���l�����Ȃ��Ȃ�A <literal>save()</literal> ���܂��B </para>
+ オブジェクトの識別子が値を持たないならば、 <literal>save()</literal> します。 </para>
</listitem>
<listitem>
<para>
- �I�u�W�F�N�g�̎��ʎq���l�����A���̒l���V���ɃC���X�^���X�����ꂽ�I�u�W�F�N�g�̂��߂̒l�ł���ꍇ�A ���̃I�u�W�F�N�g��
- <literal>save()</literal> ���܂��B </para>
+ オブジェクトの識別子が値を持ち、その値が新たにインスタンス化されたオブジェクトのための値である場合、 そのオブジェクトを
+ <literal>save()</literal> します。 </para>
</listitem>
<listitem>
<para>
- �I�u�W�F�N�g���i <literal><version></literal> ��
- <literal><timestamp></literal> �ɂ���āj
- �o�[�W�����Â�����Ă��āA�o�[�W�����̃v���p�e�B���l�����A
- ���̒l���V�����C���X�^���X�����ꂽ�I�u�W�F�N�g�̂��߂̒l�ł���ꍇ�A ���̃I�u�W�F�N�g��
- <literal>save()</literal> ���܂��B </para>
+ オブジェクトが( <literal><version></literal> や
+ <literal><timestamp></literal> によって)
+ バージョンづけされていて、バージョンのプロパティが値を持ち、
+ その値が新しくインスタンス化されたオブジェクトのための値である場合、 そのオブジェクトを
+ <literal>save()</literal> します。 </para>
</listitem>
<listitem>
<para>
- �����łȂ��ꍇ�́A���̃I�u�W�F�N�g�� <literal>update()</literal> ���܂��B </para>
+ そうでない場合は、そのオブジェクトを <literal>update()</literal> します。 </para>
</listitem>
</itemizedlist>
<para>
- �����āA <literal>merge()</literal> �͈ȉ��̂悤�ɂƂĂ�قȂ�܂��B </para>
+ そして、 <literal>merge()</literal> は以下のようにとても異なります。 </para>
<itemizedlist spacing="compact">
<listitem>
<para>
- �������ʎq���i�����C���X�^���X�����̎��_�ŃZ�b�V�����Ɗ֘A�t���Ă���Ȃ�A
- �����Ŏ�����I�u�W�F�N�g�̏�Ԃ�i�����C���X�^���X�ɃR�s�[���܂��B </para>
+ 同じ識別子を持つ永続化インスタンスがその時点でセッションと関連付いているならば、
+ 引数で受け取ったオブジェクトの状態を永続化インスタンスにコピーします。 </para>
</listitem>
<listitem>
<para>
- �i�����C���X�^���X�����̎��_�ŃZ�b�V�����Ɋ֘A�t���Ă��Ȃ��Ȃ�A
- �f�[�^�x�[�X���炻����[�h���邩�A���邢�́A�V�����i�����C���X�^���X��쐬���܂��B </para>
+ 永続化インスタンスがその時点でセッションに関連付いていないなら、
+ データベースからそれをロードするか、あるいは、新しい永続化インスタンスを作成します。 </para>
</listitem>
<listitem>
- <para>�i�����C���X�^���X���Ԃ���܂��B </para>
+ <para>永続化インスタンスが返されます。 </para>
</listitem>
<listitem>
- <para> �����Ƃ��ė^�����C���X�^���X�̓Z�b�V�����Ɗ֘A�����܂���B ����́A������Ԃ̂܂܂ł��B
+ <para> 引数として与えたインスタンスはセッションと関連を持ちません。 それは、分離状態のままです。
</para>
</listitem>
</itemizedlist>
@@ -780,28 +782,28 @@
</sect1>
<sect1 id="objectstate-deleting" revision="1">
- <title>�i���I�u�W�F�N�g�̍폜</title>
+ <title>永続オブジェクトの削除</title>
<para>
<literal>Session.delete()</literal>
- �̓I�u�W�F�N�g�̏�Ԃ�f�[�^�x�[�X����폜���܂��B ������A�폜�����I�u�W�F�N�g��A�v���P�[�V�������ێ������܂܂ł�悢�ł��B
- ���̂��߁A <literal>delete()</literal> �͉i���C���X�^���X��ꎞ�I�ɂ����̂ƍl����̂���Ԃł��B </para>
+ はオブジェクトの状態をデータベースから削除します。 もちろん、削除したオブジェクトをアプリケーションが保持したままでもよいです。
+ そのため、 <literal>delete()</literal> は永続インスタンスを一時的にするものと考えるのが一番です。 </para>
<programlisting><![CDATA[sess.delete(cat);]]></programlisting>
<para>
- �O���L�[����Ɉᔽ���郊�X�N��Ȃ��A�D���ȏ��ԂŃI�u�W�F�N�g��폜���邱�Ƃ��ł��܂��B
- �������A�Ԉ�������ԂŃI�u�W�F�N�g��폜����ƁA�O���L�[�J������ <literal>NOT NULL</literal>
- ����Ɉᔽ����\��������܂��B �Ⴆ�A�e�I�u�W�F�N�g��폜�����Ƃ��ɁA�q���I�u�W�F�N�g��폜���Y�ꂽ�ꍇ�ł��B </para>
+ 外部キー制約に違反するリスクもなく、好きな順番でオブジェクトを削除することができます。
+ ただし、間違った順番でオブジェクトを削除すると、外部キーカラムの <literal>NOT NULL</literal>
+ 制約に違反する可能性があります。 例えば、親オブジェクトを削除したときに、子供オブジェクトを削除し忘れた場合です。 </para>
</sect1>
<sect1 id="objectstate-replicating" revision="1">
- <title>�قȂ��̃f�[�^�X�g�A�Ԃł̃I�u�W�F�N�g�̃��v���P�[�V����</title>
+ <title>異なる二つのデータストア間でのオブジェクトのレプリケーション</title>
<para>
- �i���C���X�^���X�̃O���t��ʂ̃f�[�^�X�g�A�ɉi��������ꍇ�ɁA
- ���ʎq�̒l��Đ��������ɂ��ނƕ֗��ȏꍇ������܂��B </para>
+ 永続インスタンスのグラフを別のデータストアに永続化する場合に、
+ 識別子の値を再生成せずにすむと便利な場合があります。 </para>
<programlisting><![CDATA[//retrieve a cat from one database
@@ -819,110 +821,110 @@
session2.close();]]></programlisting>
<para>
- ���v���P�[�V������̃f�[�^�x�[�X�ɍs�����ɂ���ꍇ�A <literal>replicate()</literal>
- ���Փ˂�ǂ̂悤�Ɉ������� <literal>ReplicationMode</literal> �Ŏw�肵�܂��B </para>
+ レプリケーション先のデータベースに行が既にある場合、 <literal>replicate()</literal>
+ が衝突をどのように扱うかを <literal>ReplicationMode</literal> で指定します。 </para>
<itemizedlist spacing="compact">
<listitem>
<para>
<literal>ReplicationMode.IGNORE</literal> -
- �������ʎq���s���f�[�^�x�[�X�ɑ��݂���Ȃ�A ���̃I�u�W�F�N�g�����܂��B </para>
+ 同じ識別子を持つ行がデータベースに存在するなら、 そのオブジェクトを無視します。 </para>
</listitem>
<listitem>
<para>
- <literal>ReplicationMode.OVERWRITE</literal> - �������ʎq�������̍s��
- ���ׂď㏑�����܂��B </para>
+ <literal>ReplicationMode.OVERWRITE</literal> - 同じ識別子を持つ既存の行を
+ すべて上書きします。 </para>
</listitem>
<listitem>
<para>
<literal>ReplicationMode.EXCEPTION</literal> -
- �������ʎq���s���f�[�^�x�[�X�ɑ��݂���Ȃ�A ��O�𓊂��܂��B </para>
+ 同じ識別子を持つ行がデータベースに存在するなら、 例外を投げます。 </para>
</listitem>
<listitem>
<para>
<literal>ReplicationMode.LATEST_VERSION</literal> -
- �s�ɕۑ�����Ă���o�[�W�����ԍ����A �����̃I�u�W�F�N�g�̃o�[�W�����ԍ����Â��Ȃ�A���̍s��㏑�����܂��B
+ 行に保存されているバージョン番号が、 引数のオブジェクトのバージョン番号より古いならば、その行を上書きします。
</para>
</listitem>
</itemizedlist>
<para>
- ���̂悤�ȃP�[�X�ŁA���̋@�\��g�p���܂��B �قȂ�f�[�^�x�[�X�C���X�^���X�ɓ����ꂽ�f�[�^�̓����A
- ���i�X�V���ɂ�����V�X�e���ݒ���̍X�V�A��ACID�g�����U�N�V�����̂Ȃ��ʼn�����ꂽ�ύX�̃��[���o�b�N�Ȃǂł��B </para>
+ 次のようなケースで、この機能を使用します。 異なるデータベースインスタンスに入れられたデータの同期、
+ 製品更新時におけるシステム設定情報の更新、非ACIDトランザクションのなかで加えられた変更のロールバックなどです。 </para>
</sect1>
<sect1 id="objectstate-flushing">
- <title>�Z�b�V�����̃t���b�V��</title>
+ <title>セッションのフラッシュ</title>
<para>
- JDBC�R�l�N�V�����̏�Ԃƃ�������̃I�u�W�F�N�g�̏�Ԃ������邽�߂ɕK�v��
- SQL���� <literal>Session</literal> �����s���邱�Ƃ��Ƃ��ǂ�����܂��B ���̏���
- <emphasis>flush</emphasis> �́A�f�t�H���g�ł͎��̂Ƃ��ɋN����܂��B </para>
+ JDBCコネクションの状態とメモリ上のオブジェクトの状態を同期させるために必要な
+ SQL文を <literal>Session</literal> が実行することがときどきあります。 この処理
+ <emphasis>flush</emphasis> は、デフォルトでは次のときに起こります。 </para>
<itemizedlist spacing="compact">
<listitem>
- <para> �N�G������s����O </para>
+ <para> クエリを実行する前 </para>
</listitem>
<listitem>
<para>
- <literal>org.hibernate.Transaction.commit()</literal> ����s�����Ƃ�
+ <literal>org.hibernate.Transaction.commit()</literal> を実行したとき
</para>
</listitem>
<listitem>
<para>
- <literal>Session.flush()</literal> ����s�����Ƃ� </para>
+ <literal>Session.flush()</literal> を実行したとき </para>
</listitem>
</itemizedlist>
- <para> SQL���͈ȉ��̏��ԂŔ��s����܂��B
+ <para> SQL文は以下の順番で発行されます。
</para>
<orderedlist spacing="compact">
<listitem>
<para>
- ���ׂẴG���e�B�e�B�̑}���B����́A <literal>Session.save()</literal> ��g���ăZ�[�u����
- �I�u�W�F�N�g�̏��Ɏ��s���Ă����܂��B </para>
+ すべてのエンティティの挿入。これは、 <literal>Session.save()</literal> を使ってセーブした
+ オブジェクトの順に実行していきます。 </para>
</listitem>
<listitem>
- <para> ���ׂẴG���e�B�e�B�̍X�V </para>
+ <para> すべてのエンティティの更新 </para>
</listitem>
<listitem>
- <para> ���ׂẴR���N�V�����̍폜 </para>
+ <para> すべてのコレクションの削除 </para>
</listitem>
<listitem>
<para>
- ���ׂẴR���N�V�����̗v�f�ɑ���폜�A�X�V�A�}�� </para>
+ すべてのコレクションの要素に対する削除、更新、挿入 </para>
</listitem>
<listitem>
- <para>���ׂẴR���N�V�����̑}�� </para>
+ <para>すべてのコレクションの挿入 </para>
</listitem>
<listitem>
<para>
- ���ׂẴG���e�B�e�B�̍폜�B����́A<literal>Session.delete()</literal> ��g����
- �폜�����I�u�W�F�N�g�̏��Ɏ��s���Ă����܂��B </para>
+ すべてのエンティティの削除。これは、<literal>Session.delete()</literal> を使って
+ 削除したオブジェクトの順に実行していきます。 </para>
</listitem>
</orderedlist>
<para>
- (�P��O������܂��B <literal>native</literal> ID ������g�����I�u�W�F�N�g�́A
- ����炪�Z�[�u���ꂽ�Ƃ��ɑ}������܂��B�j </para>
+ (1つ例外があります。 <literal>native</literal> ID 生成を使ったオブジェクトは、
+ それらがセーブされたときに挿入されます。) </para>
<para>
- �����I��
- <literal>flush()</literal> ����Ƃ������āA <emphasis>����</emphasis>
- <literal>Session</literal> ��JDBC��R�[������̂��ɂ���
- ��ΓI�ȕۏ͂���܂���B�������A����炪���s����� <emphasis>����</emphasis> ������ �ۏ���܂��B
- �܂��AHibernate �́A <literal>Query.list(..)</literal> ���Â��f�[�^��Ԉ�����f�[�^�Ԃ��Ȃ����Ƃ�
- �ۏ��Ă��܂��B </para>
+ 明示的に
+ <literal>flush()</literal> するときを除いて、 <emphasis>いつ</emphasis>
+ <literal>Session</literal> がJDBCをコールするのかについて
+ 絶対的な保証はありません。ただし、それらが実行される <emphasis>順番</emphasis> だけは 保証されます。
+ また、Hibernate は、 <literal>Query.list(..)</literal> が古いデータや間違ったデータ返さないことを
+ 保証しています。 </para>
<para>
- �t���b�V�����p�ɂɋN����Ȃ��悤�Ƀf�t�H���g�̐U�镑����ς��邱�Ƃ��ł��܂��B <literal>FlushMode</literal>
- �N���X��3�̈قȂ郂�[�h���`���܂��B ����́A�R�~�b�g���ɂ����t���b�V�����郂�[�h �iHibernate��
- <literal>Transaction</literal> API���g����ꍇ�����ł��j�A
- ����̂������������Ɋ�Â��Ď����Ńt���b�V�����郂�[�h�A <literal>flush()</literal>
- �������I�ɌĂ�Ȃ�����t���b�V�����Ȃ����[�h�̂R�ł��B �Ō�̃��[�h�́A��ƒP�ʂ������Ԃɋy�ԏꍇ�ɖ�ɗ����܂� ( <xref
- linkend="transactions-optimistic-longsession"/> ��Q�Ƃ��Ă�������)�B
+ フラッシュが頻繁に起こらないようにデフォルトの振る舞いを変えることができます。 <literal>FlushMode</literal>
+ クラスは3つの異なるモードを定義します。 それは、コミット時にだけフラッシュするモード (Hibernateの
+ <literal>Transaction</literal> APIが使われる場合だけです)、
+ 説明のあった処理順に基づいて自動でフラッシュするモード、 <literal>flush()</literal>
+ が明示的に呼ばれない限りフラッシュしないモードの3つです。 最後のモードは、作業単位が長期間に及ぶ場合に役に立ちます ( <xref
+ linkend="transactions-optimistic-longsession"/> を参照してください)。
</para>
@@ -941,162 +943,162 @@
tx.commit(); // flush occurs
sess.close();]]></programlisting>
- <para>�t���b�V���̂Ƃ��A��O���������邩�����܂���B
- �i�Ⴆ�ADML���삪�����ᔽ����悤�ȏꍇ�ł��B�j
- ��O�����𗝉��邽�߂ɂ́AHibernate�̃g�����U�N�V�����̐U�镑���𗝉���K�v�����邽�߁A <xref
- linkend="transactions"/> �Ő�����܂��B </para>
+ <para>フラッシュのとき、例外が発生するかもしれません。
+ (例えば、DML操作が制約を違反するような場合です。)
+ 例外処理を理解するためには、Hibernateのトランザクションの振る舞いを理解する必要があるため、 <xref
+ linkend="transactions"/> で説明します。 </para>
</sect1>
<sect1 id="objectstate-transitive" revision="1">
- <title>�A���I�ȉi����</title>
+ <title>連鎖的な永続化</title>
<para>
- �X�̃I�u�W�F�N�g��Z�[�u������A�폜������A�Ēlj������肷�邱�Ƃ�
- ���Ȃ�ʓ|�ł��B���ɁA�֘A����I�u�W�F�N�g�����悤�ȏꍇ�ɂ͍ۗ����܂��B �悭����̂́A�e�q�W�����P�[�X�ł��B
- �ȉ��̗��l���Ă݂܂��傤�B </para>
+ 個々のオブジェクトをセーブしたり、削除したり、再追加したりすることは
+ かなり面倒です。特に、関連するオブジェクトを扱うような場合には際立ちます。 よくあるのは、親子関係を扱うケースです。
+ 以下の例を考えてみましょう。 </para>
<para>
- ����A�e�q�W�̎q���l�^�Ȃ�i�Ⴆ�A�Z���╶����̃R���N�V�����j�A
- �����̃��C�t�T�C�N���͐e�Ɉˑ����Ă���A�֗��ȏ�ԕω���"�J�X�P�[�h"��g�����߂ɁA �lj��̍�Ƃ͕K�v�͂���܂���B
- �e���Z�[�u���ꂽ�Ƃ��A�l�^�̎q�I�u�W�F�N�g������悤�ɃZ�[�u����܂����A �e���폜���ꂽ�Ƃ��́A�q��폜����܂��B���̑��̑��������ł��B
- �R���N�V��������1�̎q��폜����悤�ȑ���ł���܂������܂��B ���Ȃ킿�AHibernate�͂��̍폜������o����ƁA
- �l�^�̃I�u�W�F�N�g�͎Q�Ƃ��L�ł��Ȃ��̂ŁA�f�[�^�x�[�X���炻�̎q����폜���܂��B </para>
+ もし、親子関係の子が値型なら(例えば、住所や文字列のコレクション)、
+ それらのライフサイクルは親に依存しており、便利な状態変化の"カスケード"を使うために、 追加の作業は必要はありません。
+ 親がセーブされたとき、値型の子オブジェクトも同じようにセーブされますし、 親が削除されたときは、子も削除されます。その他の操作も同じです。
+ コレクションから1つの子を削除するような操作でもうまくいきます。 すなわち、Hibernateはこの削除操作を検出すると、
+ 値型のオブジェクトは参照を共有できないので、データベースからその子供を削除します。 </para>
- <para>�����ŁA�e�Ǝq���l�^�łȂ��G���e�B�e�B�ł���Ƃ��ē����V�i���I��l���Ă݂܂��傤�B
- �i�Ⴆ�A�J�e�S���[�ƕi�ڂ̊W��e�Ǝq�̔L�̊W�ł��B�j �G���e�B�e�B�́A���ꎩ�g�����C�t�T�C�N�������A�Q�Ƃ̋��L��T�|�[�g���܂��B
- �i���̂��߁A�R���N�V��������G���e�B�e�B��폜���邱�Ƃ́A �G���e�B�e�B���g�̍폜��Ӗ����܂���B�j
- �܂��A�G���e�B�e�B�́A�f�t�H���g�ł́A�֘A���鑼�̃G���e�B�e�B�� ��Ԃ�J�X�P�[�h���邱�Ƃ͂���܂���B Hibernate��
- <emphasis>���B�\���ɂ��i����</emphasis> ��f�t�H���g�ł͎��s���܂���B </para>
+ <para>ここで、親と子が値型でなくエンティティであるとして同じシナリオを考えてみましょう。
+ (例えば、カテゴリーと品目の関係や親と子の猫の関係です。) エンティティは、それ自身がライフサイクルを持ち、参照の共有をサポートします。
+ (そのため、コレクションからエンティティを削除することは、 エンティティ自身の削除を意味しません。)
+ また、エンティティは、デフォルトでは、関連する他のエンティティへ 状態をカスケードすることはありません。 Hibernateは
+ <emphasis>到達可能性による永続化</emphasis> をデフォルトでは実行しません。 </para>
<para>
- Hibernate��Session�̊�{����i <literal>persist(), merge(), saveOrUpdate(),
- delete(), lock(), refresh(), evict(), replicate()</literal> ���܂܂�܂��j�ɑ��āA
- ���ꂼ��ɑΉ�����J�X�P�[�h�X�^�C��������܂��B ���ꂼ��̃J�X�P�[�h�X�^�C���ɂ́A <literal>create, merge,
+ HibernateのSessionの基本操作( <literal>persist(), merge(), saveOrUpdate(),
+ delete(), lock(), refresh(), evict(), replicate()</literal> が含まれます)に対して、
+ それぞれに対応するカスケードスタイルがあります。 それぞれのカスケードスタイルには、 <literal>create, merge,
save-update, delete, lock, refresh, evict, replicate</literal>
- �Ƃ������O�����Ă��܂��B ����A�֘A�ɉ����ăJ�X�P�[�h�����������삪����Ȃ�A�}�b�s���O�t�@�C���ɂ����w�肵�Ȃ���Ȃ�܂���B
- �Ⴆ�A�ȉ��̂悤�ɂ��܂��B </para>
+ という名前がついています。 もし、関連に沿ってカスケードさせたい操作があるなら、マッピングファイルにそう指定しなければなりません。
+ 例えば、以下のようにします。 </para>
<programlisting><![CDATA[<one-to-one name="person" cascade="persist"/>]]></programlisting>
- <para> �J�X�P�[�h�X�^�C���́A�g�ݍ��킹�邱�Ƃ��ł��܂��B </para>
+ <para> カスケードスタイルは、組み合わせることができます。 </para>
<programlisting><![CDATA[<one-to-one name="person" cascade="persist,delete,lock"/>]]></programlisting>
<para>
- <emphasis>���ׂĂ�</emphasis>
- �����֘A�ɉ����ăJ�X�P�[�h����悤�w�肷��Ƃ��́A <literal>cascade="all"</literal> ��g���܂��B
- �f�t�H���g�� <literal>cascade="none"</literal> �́A�ǂ̑����J�X�P�[�h���Ȃ����Ƃ�Ӗ����܂��B
+ <emphasis>すべての</emphasis>
+ 操作を関連に沿ってカスケードするよう指定するときは、 <literal>cascade="all"</literal> を使います。
+ デフォルトの <literal>cascade="none"</literal> は、どの操作もカスケードしないことを意味します。
</para>
<para>
- ����ȃJ�X�P�[�h�X�^�C��
- <literal>delete-orphan</literal> �́A��Α��֘A�ɂ��� �K�p�ł��܂��B
- ����́A�֘A����폜���ꂽ�q���̃I�u�W�F�N�g�ɑ��āA <literal>delete()</literal>
- ���삪�K�p����邱�Ƃ�Ӗ����܂��B </para>
+ 特殊なカスケードスタイル
+ <literal>delete-orphan</literal> は、一対多関連にだけ 適用できます。
+ これは、関連から削除された子供のオブジェクトに対して、 <literal>delete()</literal>
+ 操作が適用されることを意味します。 </para>
- <para>�������߁F </para>
+ <para>おすすめ: </para>
<itemizedlist spacing="compact">
<listitem>
<para>
- ���ʁA <literal><many-to-one></literal> ��
- <literal><many-to-many></literal> �֘A�ɑ��ẮA
- �J�X�P�[�h��ݒ肷��Ӗ��͂���܂���B <literal><one-to-one></literal> ��
- <literal><one-to-many></literal> �֘A�ɑ��ẮA
- �J�X�P�[�h����ɗ����Ƃ�����܂��B </para>
+ 普通、 <literal><many-to-one></literal> や
+ <literal><many-to-many></literal> 関連に対しては、
+ カスケードを設定する意味はありません。 <literal><one-to-one></literal> と
+ <literal><one-to-many></literal> 関連に対しては、
+ カスケードが役に立つことがあります。 </para>
</listitem>
<listitem>
<para>
- �q���I�u�W�F�N�g�̎������e�I�u�W�F�N�g�̎����ɐ������Ȃ�A
- <literal>cascade="all,delete-orphan"</literal> ��w�肵�A �q���I�u�W�F�N�g��
- <emphasis>���C�t�T�C�N���I�u�W�F�N�g</emphasis> �ɂ��܂��B </para>
+ 子供オブジェクトの寿命が親オブジェクトの寿命に制限を受けるならば、
+ <literal>cascade="all,delete-orphan"</literal> を指定し、 子供オブジェクトを
+ <emphasis>ライフサイクルオブジェクト</emphasis> にします。 </para>
</listitem>
<listitem>
<para> .
- ����ȊO�̏ꍇ�́A�J�X�P�[�h�͂قƂ�ǕK�v�Ȃ��ł��傤�B
- �������A�����g�����U�N�V�����̂Ȃ��Őe�Ǝq���ꏏ�ɓ��삷�邱�Ƃ������Ǝv���A
- �����炩�̃R�[�h������Ԃ�Ȃ������̂ł���A
+ それ以外の場合は、カスケードはほとんど必要ないでしょう。
+ しかし、同じトランザクションのなかで親と子が一緒に動作することが多いと思い、
+ いくらかのコードを書く手間を省きたいのであれば、
<literal>cascade="persist,merge,save-update"</literal>
- ��g�����Ƃ�l���܂��傤�B </para>
+ を使うことを考えましょう。 </para>
</listitem>
</itemizedlist>
- <para> <literal>cascade="all"</literal> �Ń}�b�s���O�����֘A�i�P�l�֘A��R���N�V�����j�́A
- <emphasis>�e�q</emphasis> �X�^�C���̊֘A�ƃ}�[�N����܂��B
- ����́A�e�̃Z�[�u/�X�V/�폜���A�q�̃Z�[�u/�X�V/�폜������N�����W�̂��Ƃł��B </para>
+ <para> <literal>cascade="all"</literal> でマッピングした関連(単値関連やコレクション)は、
+ <emphasis>親子</emphasis> スタイルの関連とマークされます。
+ それは、親のセーブ/更新/削除が、子のセーブ/更新/削除を引き起こす関係のことです。 </para>
<para>
- ����ɁA�i�������ꂽ�e���q��P�ɎQ�Ƃ��Ă��邾���ŁA�q�̃Z�[�u/�X�V������N�����܂��B
- �������A���̃��^�t�@�[�͕s���S�ł��B�e����Q�Ƃ���Ȃ��Ȃ����q�́A�����I�ɍ폜 <emphasis>����܂���</emphasis> �B
- �������A <literal>cascade="delete-orphan"</literal> �Ń}�b�s���O���ꂽ
- <literal><one-to-many></literal> �֘A�� �����Ăł��B
- �e�q�W�̃J�X�P�[�h����̐��m�ȈӖ��͈ȉ��̂悤�ɂȂ�܂��B </para>
+ さらに、永続化された親が子を単に参照しているだけで、子のセーブ/更新を引き起こします。
+ しかし、このメタファーは不完全です。親から参照されなくなった子は、自動的に削除 <emphasis>されません</emphasis> 。
+ ただし、 <literal>cascade="delete-orphan"</literal> でマッピングされた
+ <literal><one-to-many></literal> 関連を 除いてです。
+ 親子関係のカスケード操作の正確な意味は以下のようになります。 </para>
<itemizedlist spacing="compact">
<listitem>
<para>
- �e��
- <literal>persist()</literal> �ɓn���ꂽ�Ȃ�A ���ׂĂ̎q��
- <literal>persist()</literal> �ɓn����܂��B </para>
+ 親が
+ <literal>persist()</literal> に渡されたならば、 すべての子は
+ <literal>persist()</literal> に渡されます。 </para>
</listitem>
<listitem>
<para>
- <literal>merge()</literal> �ɓn���ꂽ�Ȃ�A ���ׂĂ̎q��
- <literal>merge()</literal> �ɓn����܂��B </para>
+ <literal>merge()</literal> に渡されたならば、 すべての子は
+ <literal>merge()</literal> に渡されます。 </para>
</listitem>
<listitem>
<para>
- �e�� <literal>save()</literal>
- �A <literal>update()</literal>
- �A <literal>saveOrUpdate()</literal> �ɓn���ꂽ�Ȃ�A���ׂĂ̎q��
- <literal>saveOrUpdate()</literal> �ɓn����܂��B </para>
+ 親が <literal>save()</literal>
+ 、 <literal>update()</literal>
+ 、 <literal>saveOrUpdate()</literal> に渡されたならば、すべての子は
+ <literal>saveOrUpdate()</literal> に渡されます。 </para>
</listitem>
<listitem>
<para>
- �ꎞ�I�܂��͕�����Ԃ̎q���A�i�������ꂽ�e�ɎQ�Ƃ��ꂽ�Ȃ�A
- <literal>saveOrUpdate()</literal> �ɓn����܂��B </para>
+ 一時的または分離状態の子が、永続化された親に参照されたならば、
+ <literal>saveOrUpdate()</literal> に渡されます。 </para>
</listitem>
<listitem>
<para>
- �e���폜���ꂽ�Ȃ�A���ׂĂ̎q�́A <literal>delete()</literal> �ɓn����܂��B </para>
+ 親が削除されたならば、すべての子は、 <literal>delete()</literal> に渡されます。 </para>
</listitem>
<listitem>
<para>
- �q���i�������ꂽ�e����Q�Ƃ���Ȃ��Ȃ����Ƃ��́A <emphasis>���ɉ���N����܂���</emphasis> �B
- ����āA�A�v���P�[�V�������K�v�ł���A�����I�ɍ폜����K�v������܂��B
- �������A <literal>cascade="delete-orphan"</literal> �̏ꍇ�����܂��B
- ���̏ꍇ�A�u�e�̂Ȃ��v�q�͍폜����܂��B </para>
+ 子が永続化された親から参照されなくなったときは、 <emphasis>特に何も起こりません</emphasis> 。
+ よって、アプリケーションが必要であれば、明示的に削除する必要があります。
+ ただし、 <literal>cascade="delete-orphan"</literal> の場合を除きます。
+ この場合、「親のない」子は削除されます。 </para>
</listitem>
</itemizedlist>
<para>
- �Ō�ɁA����̃J�X�P�[�h���I�u�W�F�N�g�O���t�ɓK�p�����̂́A <emphasis>�R�[��������</emphasis>
- ���邢�́A <emphasis>flush������</emphasis> �ł��邱�Ƃɒ��ӂ��Ă��������B
- ���ׂĂ̑���́A���̑��삪���s���ꂽ�Ƃ��ɁA���B�\�Ȋ֘A����G���e�B�e�B�ɑ���
- �J�X�P�[�h���\�Ȃ�J�X�P�[�h���܂��B
- �������A <literal>save-upate</literal> ��
- <literal>delete-orphan</literal> �́A <literal>Session</literal>
- ��flush���Ă���ԂɁA ���ׂĂ̓��B�\�Ȋ֘A����G���e�B�e�B�ɓ`�d���܂��B</para>
+ 最後に、操作のカスケードがオブジェクトグラフに適用されるのは、 <emphasis>コールした時</emphasis>
+ あるいは、 <emphasis>flushした時</emphasis> であることに注意してください。
+ すべての操作は、その操作が実行されたときに、到達可能な関連するエンティティに対して
+ カスケードが可能ならカスケードします。
+ しかし、 <literal>save-upate</literal> と
+ <literal>delete-orphan</literal> は、 <literal>Session</literal>
+ がflushしている間に、 すべての到達可能な関連するエンティティに伝播します。</para>
</sect1>
<sect1 id="objectstate-metadata">
- <title>���^�f�[�^�̎g�p</title>
+ <title>メタデータの使用</title>
<para>
- Hibernate�́A���ׂẴG���e�B�e�B�ƒl�^�̔��Ƀ��b�`�ȃ��^���x���̃��f����K�v�Ƃ��܂��B
- �Ƃ��ǂ��A���̃��f���̓A�v���P�[�V�����ɂƂ��ĂƂĂ��ɗ����܂��B
- �Ⴆ�A�A�v���P�[�V�����́AHibernate�̃��^�f�[�^��g���āA"����" �f�B�[�v�R�s�[�A���S���Y����
- �����ł��邩����܂���B���̃A���S���Y���Ƃ́A�ǂ̃I�u�W�F�N�g���R�s�[�����ׂ����i��F�ς̒l�^�j��
- �ǂ̃I�u�W�F�N�g�̓R�s�[����Ȃ��ׂ����i��F�s�ςȒl�^��\�Ȃ�֘A����G���e�B�e�B�j�� ���f�ł����̂ł��B </para>
+ Hibernateは、すべてのエンティティと値型の非常にリッチなメタレベルのモデルを必要とします。
+ ときどき、このモデルはアプリケーションにとってとても役に立ちます。
+ 例えば、アプリケーションは、Hibernateのメタデータを使って、"賢い" ディープコピーアルゴリズムを
+ 実装できるかもしません。そのアルゴリズムとは、どのオブジェクトがコピーされるべきか(例:可変の値型)や
+ どのオブジェクトはコピーされないべきか(例:不変な値型や可能なら関連するエンティティ)を 判断できるものです。 </para>
<para>
- Hibernate��<literal>ClassMetadata</literal>
- ��<literal>CollectionMetadata</literal> �C���^�t�F�[�X��
- <literal>Type</literal> �K�w��ʂ��ă��^�f�[�^����J���܂��B
- ���^�f�[�^�C���^�[�t�F�C�X�̃C���X�^���X�́A <literal>SessionFactory</literal> ���瓾���܂��B
+ Hibernateは<literal>ClassMetadata</literal>
+ と<literal>CollectionMetadata</literal> インタフェースと
+ <literal>Type</literal> 階層を通してメタデータを公開します。
+ メタデータインターフェイスのインスタンスは、 <literal>SessionFactory</literal> から得られます。
</para>
@@ -1117,4 +1119,4 @@
</sect1>
-</chapter>
\ No newline at end of file
+</chapter>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/toolset_guide.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/toolset_guide.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/toolset_guide.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,39 +1,41 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="toolsetguide" revision="2">
<title>Toolset Guide
- �c�[���Z�b�g�K�C�h
+ ツールセットガイド
</title>
<para>
- Hibernate��g�������E���h�g���b�v�G���W�j�A�����O�́A
- Eclipse�v���O�C����R�}���h���C���c�[���A������Ant�^�X�N��g�����Ƃʼn\�ł��B
+ Hibernateを使ったラウンドトリップエンジニアリングは、
+ Eclipseプラグインやコマンドラインツール、もちろんAntタスクを使うことで可能です。
</para>
<para>
- <emphasis>Hibernate Tools</emphasis> �͌��݁A�����f�[�^�x�[�X�̃��o�[�X�G���W�j�A�����O��Ant�^�X�N�ɉ����āAEclipseIDE�̃v���O�C����܂݂܂��B
+ <emphasis>Hibernate Tools</emphasis> は現在、既存データベースのリバースエンジニアリングのAntタスクに加えて、EclipseIDEのプラグインを含みます。
</para>
<itemizedlist>
<listitem><para>
- <emphasis>�}�b�s���O�G�f�B�^:</emphasis>
- Hibernate��XML�}�b�s���O�t�@�C���p�̃G�f�B�^�ŁA
- �����⊮�ƍ\�������\����T�|�[�g���Ă��܂��B�N���X����v���p�e�B/�t�B�[���h���ɑ��鎩���⊮��T�|�[�g���A
- �ʏ��XML�G�f�B�^������͂ł��B
+ <emphasis>マッピングエディタ:</emphasis>
+ HibernateのXMLマッピングファイル用のエディタで、
+ 自動補完と構文強調表示をサポートしています。クラス名やプロパティ/フィールド名に対する自動補完もサポートし、
+ 通常のXMLエディタよりも強力です。
</para></listitem>
<listitem><para>
<emphasis>Console:</emphasis>
- �R���\�[���̓G�N���v�X�̐V�����r���[�ł��B
- �R���\�[���R���t�B�M�����[�V�����̃c���[�I�[�o�[�r���[�ɉ����āA�i���N���X�Ƃ��̊֘A�̑��ݍ�p�r���[������܂��B
- �f�[�^�x�[�X��HQL����s���A���ʂڃG�N���v�X��Ō��邱�Ƃ��ł��܂��B
+ コンソールはエクリプスの新しいビューです。
+ コンソールコンフィギュレーションのツリーオーバービューに加えて、永続クラスとその関連の相互作用ビューも得られます。
+ データベースにHQLを実行し、結果を直接エクリプス上で見ることができます。
</para></listitem>
<listitem><para>
- <emphasis>�J���E�B�U�[�h</emphasis>
- Hibernate��Eclipse�c�[���͂������̃E�B�U�[�h����܂��B
- �E�B�U�[�h��g����Hibernate�̐ݒ�t�@�C��(cfg.xml)���₭����������A
- �����̃f�[�^�x�[�X�X�L�[�}��POJO�̃\�[�X�t�@�C����Hibernate�̃}�b�s���O�t�@�C���ւƁA
- ���S�Ƀ��o�[�X�G���W�j�A�����O���邱�Ƃ��ł��܂��B
- ���o�[�X�G���W�j�A�����O�E�B�U�[�h�̓J�X�^�}�C�Y�\�ȃe���v���[�g��T�|�[�g���܂��B
+ <emphasis>開発ウィザード</emphasis>
+ HibernateのEclipseツールはいくつかのウィザードを提供します。
+ ウィザードを使ってHibernateの設定ファイル(cfg.xml)をすばやく生成したり、
+ 既存のデータベーススキーマをPOJOのソースファイルとHibernateのマッピングファイルへと、
+ 完全にリバースエンジニアリングすることができます。
+ リバースエンジニアリングウィザードはカスタマイズ可能なテンプレートをサポートします。
</para></listitem>
<listitem><para>
<emphasis>Ant Tasks:</emphasis>
@@ -42,43 +44,43 @@
</itemizedlist>
<para>
- ���ڂ������� <emphasis>Hibernate Tools</emphasis> �p�b�P�[�W�Ƃ��̃h�L�������g��Q�Ƃ��Ă��������B
+ より詳しい情報は <emphasis>Hibernate Tools</emphasis> パッケージとそのドキュメントを参照してください。
</para>
<para>
- �������AHibernate�̃��C���p�b�P�[�W�� <emphasis>SchemaExport</emphasis> �A
- �ʖ� <literal>hbm2ddl</literal> ��܂݂܂�(Hibernate��ŃI���U�t���C�Ŏg�p�ł��܂�)�B
+ しかし、Hibernateのメインパッケージは <emphasis>SchemaExport</emphasis> 、
+ 別名 <literal>hbm2ddl</literal> も含みます(Hibernate内でオンザフライで使用できます)。
</para>
<sect1 id="toolsetguide-s1" revision="2">
- <title>�X�L�[�}�̎�������</title>
+ <title>スキーマの自動生成</title>
<para>
- DDL��Hibernate���[�e�B���e�B�ɂ��}�b�s���O�t�@�C�����琶�����邱�Ƃ��ł��܂��B
- �������ꂽ�X�L�[�}�̓G���e�B�e�B��R���N�V�����̃e�[�u���ɑ���Q�Ɛ���������(��L�[�ƊO���L�[)��܂݂܂��B
- �e�[�u���ƃV�[�P���X�̓}�b�s���O���鎯�ʎq�W�F�l���[�^�ɑ��Đ�������܂��B
+ DDLはHibernateユーティリティによりマッピングファイルから生成することができます。
+ 生成されたスキーマはエンティティやコレクションのテーブルに対する参照整合性制約(主キーと外部キー)を含みます。
+ テーブルとシーケンスはマッピングする識別子ジェネレータに対して生成されます。
</para>
<para>
- DDL�̓x���_�[�ˑ��Ȃ̂ŁA���̃c�[����g���Ƃ��́A<literal>hibernate.dialect</literal>
- �v���p�e�B��SQL�� <literal>����</literal> ��w�� <emphasis>���Ȃ���Ȃ�܂���</emphasis> �B
+ DDLはベンダー依存なので、このツールを使うときは、<literal>hibernate.dialect</literal>
+ プロパティでSQLの <literal>方言</literal> を指定 <emphasis>しなければなりません</emphasis> 。
</para>
<para>
- �܂��A���������X�L�[�}����P����悤�ɁA�}�b�s���O�t�@�C����J�X�^�}�C�Y���Ă��������B
+ まず、生成されるスキーマを改善するように、マッピングファイルをカスタマイズしてください。
</para>
<sect2 id="toolsetguide-s1-2" revision="3">
- <title>�X�L�[�}�̃J�X�^�}�C�Y</title>
+ <title>スキーマのカスタマイズ</title>
<para>
- ������Hibernate�̃}�b�s���O�v�f�ł́A�I�v�V������ <literal>length</literal> �Ƃ������̑������`���Ă��܂��B
- ���̑����ŃJ��������ݒ肷�邱�Ƃ��ł��܂�(�܂���NUMERIC/DECIMAL�^�̃f�[�^�̐��x��ݒ�ł��܂�)�B
+ 多くのHibernateのマッピング要素では、オプションの <literal>length</literal> という名の属性を定義しています。
+ この属性でカラム長を設定することができます(またはNUMERIC/DECIMAL型のデータの精度を設定できます)。
</para>
<para>
- <literal>not-null</literal> �����i�e�[�u���̃J������ <literal>NOT NULL</literal> ���������j��
- <literal>unique</literal> �����i�e�[�u���̃J������ <literal>UNIQUE</literal> ���������j���ݒ�ł���^�O�����܂��B
+ <literal>not-null</literal> 属性(テーブルのカラムへ <literal>NOT NULL</literal> 制約を生成する)と
+ <literal>unique</literal> 属性(テーブルのカラムへ <literal>UNIQUE</literal> 制約を生成する)が設定できるタグもあります。
</para>
<programlisting><![CDATA[<many-to-one name="bar" column="barId" not-null="true"/>]]></programlisting>
@@ -86,9 +88,9 @@
<programlisting><![CDATA[<element column="serialNumber" type="long" not-null="true" unique="true"/>]]></programlisting>
<para>
- <literal>unique-key</literal> �����̓J������O���[�v�����Ĉ�̃L�[����ɂ��邽�߂Ɏg���܂��B
- ���݁A<literal>unique-key</literal> �����Ŏw�肳�ꂽ�l�͐���̎w��ɂ� <emphasis>�g��ꂸ</emphasis> �A
- �}�b�s���O�t�@�C���ŃJ������O���[�v�����邱�Ƃɂ̂ݎg���܂��B
+ <literal>unique-key</literal> 属性はカラムをグループ化して一つのキー制約にするために使われます。
+ 現在、<literal>unique-key</literal> 属性で指定された値は制約の指定には <emphasis>使われず</emphasis> 、
+ マッピングファイルでカラムをグループ化することにのみ使われます。
</para>
<programlisting><![CDATA[<many-to-one name="org" column="orgId" unique-key="OrgEmployeeId"/>
@@ -97,21 +99,21 @@
<para>
- <literal>index</literal> �����̓}�b�s���O����J������g���Đ��������C���f�b�N�X�̖��O��w�肵�܂��B
- �����J������P�̃C���f�b�N�X�ɃO���[�v���ł��܂��B�P�ɁA�����C���f�b�N�X����w�肷�邾���ł��B
+ <literal>index</literal> 属性はマッピングするカラムを使って生成したインデックスの名前を指定します。
+ 複数カラムを1つのインデックスにグループ化できます。単に、同じインデックス名を指定するだけです。
</para>
<programlisting><![CDATA[<property name="lastName" index="CustName"/>
<property name="firstName" index="CustName"/>]]></programlisting>
<para>
- <literal>foreign-key</literal> �����́A�������ꂽ�O���L�[����̖��O��I�[�o�[���C�h���邽�߂Ɏg�p�ł��܂��B
+ <literal>foreign-key</literal> 属性は、生成された外部キー制約の名前をオーバーライドするために使用できます。
</para>
<programlisting><![CDATA[<many-to-one name="bar" column="barId" foreign-key="FKFooBar"/>]]></programlisting>
<para>
- �����̃}�b�s���O�v�f�́A�q <literal><column></literal> �v�f��L�q�ł��܂��B����͕����J�����^�̃}�b�s���O�ɂ͓��ɗL�p�ł��B
+ 多くのマッピング要素は、子 <literal><column></literal> 要素を記述できます。これは複数カラム型のマッピングには特に有用です。
</para>
<programlisting><![CDATA[<property name="name" type="my.customtypes.Name"/>
@@ -121,9 +123,9 @@
</property>]]></programlisting>
<para>
- <literal>default</literal> �����̓J�����̃f�t�H���g�l��w�肵�܂�
- (�}�b�s���O�����N���X�̐V�����C���X�^���X��ۑ�����O�ɁA
- �}�b�s���O�����v���p�e�B�֓����l�������ׂ��ł�)�B
+ <literal>default</literal> 属性はカラムのデフォルト値を指定します
+ (マッピングしたクラスの新しいインスタンスを保存する前に、
+ マッピングしたプロパティへ同じ値を代入すべきです)。
</para>
<programlisting><![CDATA[<property name="credits" type="integer" insert="false">
@@ -135,7 +137,7 @@
</property>]]></programlisting>
<para>
- <literal>sql-type</literal> �����ŁA�f�t�H���g��Hibernate�^����SQL�̃f�[�^�^�ւ̃}�b�s���O��I�[�o�[���C�h�ł��܂��B
+ <literal>sql-type</literal> 属性で、デフォルトのHibernate型からSQLのデータ型へのマッピングをオーバーライドできます。
</para>
@@ -145,7 +147,7 @@
<para>
- <literal>check</literal> �����Ń`�F�b�N�����w�肷�邱�Ƃ��ł��܂��B
+ <literal>check</literal> 属性でチェック制約を指定することができます。
</para>
<programlisting><![CDATA[<property name="foo" type="integer">
@@ -159,94 +161,94 @@
<table frame="topbot" id="schemattributes-summary" revision="2">
- <title>�܂Ƃ�</title>
+ <title>まとめ</title>
<tgroup cols="3">
<colspec colwidth="1*"/>
<colspec colwidth="1*"/>
<colspec colwidth="2.5*"/>
<thead>
<row>
- <entry>����</entry>
- <entry>�l</entry>
- <entry>���</entry>
+ <entry>属性</entry>
+ <entry>値</entry>
+ <entry>説明</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>length</literal></entry>
- <entry>���l</entry>
- <entry>�J�����̒���</entry>
+ <entry>数値</entry>
+ <entry>カラムの長さ</entry>
</row>
<row>
<entry><literal>precision</literal></entry>
- <entry>���l</entry>
- <entry>�J������DECIMAL�^�̐��x�iprecision�j</entry>
+ <entry>数値</entry>
+ <entry>カラムのDECIMAL型の精度(precision)</entry>
</row>
<row>
<entry><literal>scale</literal></entry>
- <entry>���l</entry>
- <entry>�J������DECIMAL�^�̃X�P�[���iscale�j</entry>
+ <entry>数値</entry>
+ <entry>カラムのDECIMAL型のスケール(scale)</entry>
</row>
<row>
<entry><literal>not-null</literal></entry>
<entry><literal>true|false</literal></entry>
- <entry>�J������null�l����Ȃ����Ƃ�w�肵�܂�
+ <entry>カラムがnull値を取らないことを指定します
</entry>
</row>
<row>
<entry><literal>unique</literal></entry>
<entry><literal>true|false</literal></entry>
- <entry>�J���������j�[�N��������Ƃ�w�肵�܂�
+ <entry>カラムがユニーク制約を持つことを指定します
</entry>
</row>
<row>
<entry><literal>index</literal></entry>
- <entry><literal>�C���f�b�N�X��</literal> </entry>
- <entry>(�����J������)�C���f�b�N�X�̖��O��w�肵�܂�
+ <entry><literal>インデックス名</literal> </entry>
+ <entry>(複数カラムの)インデックスの名前を指定します
</entry>
</row>
<row>
<entry><literal>unique-key</literal></entry>
- <entry><literal>���j�[�N�L�[��</literal></entry>
- <entry>�����J�����̃��j�[�N����̖��O��w�肵�܂�
+ <entry><literal>ユニークキー名</literal></entry>
+ <entry>複数カラムのユニーク制約の名前を指定します
</entry>
</row>
<row>
<entry><literal>foreign-key</literal></entry>
- <entry><literal>�O���L�[��</literal></entry>
+ <entry><literal>外部キー名</literal></entry>
<entry>
- <one-to-one>�A<many-to-one>�A<many-to-many>�}�b�s���O�v�f��g���āA
- �֘A�ɑ��������ꂽ�O���L�[����̖��O��w�肵�܂��B
- <literal>SchemaExport</literal> �� <literal>inverse="true"</literal> ����l�����Ȃ����Ƃɒ��ӂ��Ă��������B
+ <one-to-one>、<many-to-one>、<many-to-many>マッピング要素を使って、
+ 関連に対し生成された外部キー制約の名前を指定します。
+ <literal>SchemaExport</literal> は <literal>inverse="true"</literal> 側を考慮しないことに注意してください。
</entry>
</row>
<row>
<entry><literal>sql-type</literal></entry>
- <entry><literal>SQL�̃J�����^</literal></entry>
+ <entry><literal>SQLのカラム型</literal></entry>
<entry>
- �f�t�H���g�̃J�����^��I�[�o�[���C�h���܂�( <literal><column></literal> �v�f�̑����̂�)
+ デフォルトのカラム型をオーバーライドします( <literal><column></literal> 要素の属性のみ)
</entry>
</row>
<row>
<entry><literal>default</literal></entry>
- <entry>SQL��</entry>
+ <entry>SQL式</entry>
<entry>
- �J�����̃f�t�H���g�l��w�肵�܂�
+ カラムのデフォルト値を指定します
</entry>
</row>
<row>
<entry><literal>check</literal></entry>
- <entry>SQL��</entry>
+ <entry>SQL式</entry>
<entry>
- �J�������e�[�u����SQL�̃`�F�b�N�����쐬���܂�
+ カラムかテーブルにSQLのチェック制約を作成します
</entry>
</row>
</tbody>
@@ -254,7 +256,7 @@
</table>
<para>
- <literal><comment></literal> �v�f�Ő�������X�L�[�}�ɃR�����g��w�肷�邱�Ƃ��ł��܂��B
+ <literal><comment></literal> 要素で生成するスキーマにコメントを指定することができます。
</para>
@@ -270,16 +272,16 @@
</property>]]></programlisting>
<para>
- ����ɂ��A��������DDL�� <literal>comment on table</literal> �� <literal>comment on column</literal> ����������܂��B
+ これにより、生成したDDLに <literal>comment on table</literal> や <literal>comment on column</literal> 文が書かれます。
</para>
</sect2>
<sect2 id="toolsetguide-s1-3" revision="2">
- <title>�c�[���̎��s</title>
+ <title>ツールの実行</title>
<para>
- <literal>SchemaExport</literal> �͕W���o�͂ɑ���DDL�X�N���v�g�����o���ADDL������s���������܂��B
+ <literal>SchemaExport</literal> は標準出力に対してDDLスクリプトを書き出し、DDL文を実行したりもします。
</para>
<para>
@@ -290,70 +292,70 @@
<table frame="topbot">
<title> <literal>SchemaExport</literal> Command Line Options
- <literal>SchemaExport</literal> �̃R�}���h���C���I�v�V����
+ <literal>SchemaExport</literal> のコマンドラインオプション
</title>
<tgroup cols="2">
<colspec colwidth="1.5*"/>
<colspec colwidth="2*"/>
<thead>
<row>
- <entry>�I�v�V����</entry>
- <entry>���</entry>
+ <entry>オプション</entry>
+ <entry>説明</entry>
</row>
</thead>
<tbody>
<row>
<entry> <literal>--quiet</literal> </entry>
- <entry>�X�N���v�g��W���o�͂ɏo�͂��܂���</entry>
+ <entry>スクリプトを標準出力に出力しません</entry>
</row>
<row>
<entry> <literal>--drop</literal> </entry>
- <entry>�e�[�u���̍폜������s���܂�</entry>
+ <entry>テーブルの削除だけを行います</entry>
</row>
<row>
<entry> <literal>--create</literal> </entry>
- <entry>�e�[�u���̐����݂̂�s���܂��B
+ <entry>テーブルの生成のみを行います。
</entry>
</row>
<row>
<entry> <literal>--text</literal> </entry>
- <entry>�f�[�^�x�[�X�ɃG�N�X�|�[�g���܂���</entry>
+ <entry>データベースにエクスポートしません</entry>
</row>
<row>
<entry> <literal>--output=my_schema.ddl</literal> </entry>
- <entry> DDL�X�N���v�g��t�@�C���ɏo�͂��܂�</entry>
+ <entry> DDLスクリプトをファイルに出力します</entry>
</row>
<row>
<entry> <literal>--naming=eg.MyNamingStrategy</literal> </entry>
- <entry> <literal>NamingStrategy</literal> ��I���܂�
+ <entry> <literal>NamingStrategy</literal> を選択します
</entry>
</row>
<row>
<entry><literal>--config=hibernate.cfg.xml</literal> </entry>
- <entry>XML�t�@�C������Hibernate�̒�`����ǂݍ��݂܂�</entry>
+ <entry>XMLファイルからHibernateの定義情報を読み込みます</entry>
</row>
<row>
<entry> <literal>--properties=hibernate.properties</literal> </entry>
- <entry>�t�@�C������f�[�^�x�[�X�v���p�e�B��ǂݍ��݂܂�</entry>
+ <entry>ファイルからデータベースプロパティを読み込みます</entry>
</row>
<row>
<entry> <literal>--format</literal> </entry>
- <entry>�X�N���v�g��ɐ�������SQL��ǂ݂₷���悤�Ƀt�H�[�}�b�g���܂�</entry>
+ <entry>スクリプト内に生成するSQLを読みやすいようにフォーマットします</entry>
</row>
<row>
<entry> <literal>--delimiter=x</literal> </entry>
- <entry>�X�N���v�g�̍s��蕶����ݒ肵�܂�</entry>
+ <entry>スクリプトの行区切り文字を設定します</entry>
</row>
</tbody>
</tgroup>
</table>
<para>
- �A�v���P�[�V������ <literal>SchemaExport</literal> ��g�ݍ��ނ��Ƃ�ł��܂��F
+ アプリケーションに <literal>SchemaExport</literal> を組み込むこともできます:
</para>
<programlisting><![CDATA[Configuration cfg = ....;
@@ -363,69 +365,69 @@
<sect2 id="toolsetguide-s1-4">
- <title>�v���p�e�B</title>
+ <title>プロパティ</title>
<para>
- ���̂悤�ɁA�f�[�^�x�[�X�̃v���p�e�B��w�肷�邱�Ƃ��ł��܂��B
+ 次のように、データベースのプロパティを指定することができます。
</para>
<itemizedlist spacing="compact">
<listitem>
- <para><literal>-D</literal> <emphasis><property></emphasis> ��g���āA�V�X�e���v���p�e�B�Ƃ���
+ <para><literal>-D</literal> <emphasis><property></emphasis> を使って、システムプロパティとして
</para>
</listitem>
<listitem>
- <para><literal>hibernate.properties</literal> �t�@�C�����
+ <para><literal>hibernate.properties</literal> ファイル内で
</para>
</listitem>
<listitem>
- <para> <literal>--properties</literal> ��g���Ďw�肵���v���p�e�B�t�@�C�����
+ <para> <literal>--properties</literal> を使って指定したプロパティファイル内で
</para>
</listitem>
</itemizedlist>
<para>
- �K�v�ȃv���p�e�B�͈ȉ��̂�̂ł��F
+ 必要なプロパティは以下のものです:
</para>
<table frame="topbot">
- <title>SchemaExport�R�l�N�V�����v���p�e�B</title>
+ <title>SchemaExportコネクションプロパティ</title>
<tgroup cols="2">
<colspec colwidth="1.5*"/>
<colspec colwidth="2*"/>
<thead>
<row>
- <entry>�v���p�e�B��
+ <entry>プロパティ名
</entry>
- <entry>���
+ <entry>説明
</entry>
</row>
</thead>
<tbody>
<row>
<entry> <literal>hibernate.connection.driver_class</literal> </entry>
- <entry>jdbc�̃h���C�o�[�N���X
+ <entry>jdbcのドライバークラス
</entry>
</row>
<row>
<entry> <literal>hibernate.connection.url</literal> </entry>
- <entry>jdbc��url
+ <entry>jdbcのurl
</entry>
</row>
<row>
<entry> <literal>hibernate.connection.username</literal> </entry>
- <entry>�f�[�^�x�[�X�̃��[�U
+ <entry>データベースのユーザ
</entry>
</row>
<row>
<entry> <literal>hibernate.connection.password</literal> </entry>
- <entry>���[�U�p�X���[�h
+ <entry>ユーザパスワード
</entry>
</row>
<row>
<entry> <literal>hibernate.dialect</literal> </entry>
- <entry>�f�[�^�x�[�X����
+ <entry>データベース方言
</entry>
</row>
</tbody>
@@ -435,10 +437,10 @@
</sect2>
<sect2 id="toolsetguide-s1-5">
- <title>Ant��g�p����</title>
+ <title>Antを使用する</title>
<para>
- Ant�̃r���h�X�N���v�g���� <literal>SchemaExport</literal> ��Ăяo�����Ƃ��ł��܂��B:
+ Antのビルドスクリプトから <literal>SchemaExport</literal> を呼び出すことができます。:
</para>
<programlisting><![CDATA[<target name="schemaexport">
@@ -462,13 +464,13 @@
</sect2>
<sect2 id="toolsetguide-s1-6" revision="2">
- <title>�C���N�������^���ȃX�L�[�}�X�V
+ <title>インクリメンタルなスキーマ更新
</title>
<para>
- <literal>SchemaUpdate</literal> �c�[���͊����̃X�L�[�}��C���N�������^���ɍX�V���܂��B
- <literal>SchemaUpdate</literal> ��JDBC�̃��^�f�[�^API�ɋ����ˑ����܂��B
- ���̂��߁A���ׂĂ�JDBC�h���C�o�ł��܂������Ƃ͌���Ȃ����Ƃɒ��ӂ��Ă��������B
+ <literal>SchemaUpdate</literal> ツールは既存のスキーマをインクリメンタルに更新します。
+ <literal>SchemaUpdate</literal> はJDBCのメタデータAPIに強く依存します。
+ そのため、すべてのJDBCドライバでうまくいくとは限らないことに注意してください。
</para>
<para>
@@ -477,42 +479,42 @@
</para>
<table frame="topbot">
- <title> <literal>SchemaUpdate</literal> �̃R�}���h���C����I�v�V����</title>
+ <title> <literal>SchemaUpdate</literal> のコマンドライン・オプション</title>
<tgroup cols="2">
<colspec colwidth="1.5*"/>
<colspec colwidth="2*"/>
<thead>
<row>
- <entry>�I�v�V����</entry>
- <entry>���</entry>
+ <entry>オプション</entry>
+ <entry>説明</entry>
</row>
</thead>
<tbody>
<row>
<entry> <literal>--quiet</literal> </entry>
- <entry>�W���o�͂ɃX�N���v�g��o�͂��܂���</entry>
+ <entry>標準出力にスクリプトを出力しません</entry>
</row>
<row>
<entry> <literal>--text</literal> </entry>
- <entry>�f�[�^�x�[�X�ɃX�N���v�g��G�N�X�|�[�g���܂���
+ <entry>データベースにスクリプトをエクスポートしません
</entry>
</row>
<row>
<entry> <literal>--naming=eg.MyNamingStrategy</literal> </entry>
- <entry><literal>NamingStrategy</literal> ��I���܂��B
+ <entry><literal>NamingStrategy</literal> を選択します。
</entry>
</row>
<row>
<entry> <literal>--properties=hibernate.properties</literal> </entry>
- <entry>�t�@�C������f�[�^�x�[�X�v���p�e�B��ǂݍ��݂܂�
+ <entry>ファイルからデータベースプロパティを読み込みます
</entry>
</row>
<row>
<entry> <literal>--config=hibernate.cfg.xml</literal> </entry>
- <entry><literal>.cfg.xml</literal> �t�@�C����w�肵�܂�
+ <entry><literal>.cfg.xml</literal> ファイルを指定します
</entry>
</row>
@@ -521,7 +523,7 @@
</table>
<para>
- �A�v���P�[�V������ <literal>SchemaUpdate</literal> ��g�ݍ��ނ��Ƃ��ł��܂��B�F
+ アプリケーションに <literal>SchemaUpdate</literal> を組み込むことができます。:
</para>
<programlisting><![CDATA[Configuration cfg = ....;
@@ -531,10 +533,10 @@
<sect2 id="toolsetguide-s1-7">
- <title>�C���N�������^���ȃX�L�[�}�X�V�ɑ���Ant�̎g�p</title>
+ <title>インクリメンタルなスキーマ更新に対するAntの使用</title>
<para>
- Ant�X�N���v�g���� <literal>SchemaUpdate</literal> ��Ăяo�����Ƃ��ł��܂��F
+ Antスクリプトから <literal>SchemaUpdate</literal> を呼び出すことができます:
</para>
<programlisting><![CDATA[<target name="schemaupdate">
@@ -557,7 +559,7 @@
<title>Schema validation</title>
<para>
- <literal>SchemaValidator</literal> �c�[���́A�����̃f�[�^�x�[�X�X�L�[�}�ƍ쐬�����}�b�s���O�h�L�������g��"��v����"���Ƃ����܂��B <literal>SchemaValidator</literal> ��JDBC�̃��^�f�[�^API�ɋ����ˑ����邱�Ƃɒ��ӂ��Ă��������B���̂��߁A���ׂĂ�JDBC�h���C�o�[�ō쓮�����̂ł͂���܂���B���̃c�[���̓e�X�g���ɔ��ɗL�p�ł��B
+ <literal>SchemaValidator</literal> ツールは、既存のデータベーススキーマと作成したマッピングドキュメントが"一致する"ことを検証します。 <literal>SchemaValidator</literal> はJDBCのメタデータAPIに強く依存することに注意してください。そのため、すべてのJDBCドライバーで作動するものではありません。このツールはテスト時に非常に有用です。
</para>
<para>
@@ -566,31 +568,31 @@
</para>
<table frame="topbot">
- <title> <literal>SchemaValidator</literal> �̃R�}���h���C���E�I�v�V����
+ <title> <literal>SchemaValidator</literal> のコマンドライン・オプション
</title>
<tgroup cols="2">
<colspec colwidth="1.5*"/>
<colspec colwidth="2*"/>
<thead>
<row>
- <entry>�I�v�V����</entry>
- <entry>���</entry>
+ <entry>オプション</entry>
+ <entry>説明</entry>
</row>
</thead>
<tbody>
<row>
<entry> <literal>--naming=eg.MyNamingStrategy</literal> </entry>
- <entry><literal>NamingStrategy</literal> ��I���܂�
+ <entry><literal>NamingStrategy</literal> を選択します
</entry>
</row>
<row>
<entry> <literal>--properties=hibernate.properties</literal> </entry>
- <entry>�t�@�C������f�[�^�x�[�X�̃v���p�e�B��ǂݍ��݂܂�
+ <entry>ファイルからデータベースのプロパティを読み込みます
</entry>
</row>
<row>
<entry> <literal>--config=hibernate.cfg.xml</literal> </entry>
- <entry><literal>.cfg.xml</literal> �t�@�C����w�肵�܂�
+ <entry><literal>.cfg.xml</literal> ファイルを指定します
</entry>
</row>
</tbody>
@@ -598,7 +600,7 @@
</table>
<para>
- <literal>SchemaValidator</literal> ��A�v���P�[�V�����ɑg�ݍ��ނ��Ƃ��o���܂�:
+ <literal>SchemaValidator</literal> をアプリケーションに組み込むことが出来ます:
</para>
<programlisting><![CDATA[Configuration cfg = ....;
@@ -607,10 +609,10 @@
</sect2>
<sect2 id="toolsetguide-s1-9">
- <title>�X�L�[�}�̃o���f�[�V������Ant��g�p���܂�</title>
+ <title>スキーマのバリデーションにAntを使用します</title>
<para>
- Ant�X�N���v�g���� <literal>SchemaValidator</literal> ��Ăяo���܂�:
+ Antスクリプトから <literal>SchemaValidator</literal> を呼び出せます:
</para>
<programlisting><![CDATA[<target name="schemavalidate">
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/transactions.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/transactions.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/transactions.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,299 +1,301 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="transactions" revision="2">
- <title>�g�����U�N�V�����ƕ��s��</title>
+ <title>トランザクションと並行性</title>
<para>
- Hibernate�Ɠ������s����ɂ��čł�d�v�ȓ_�́A�e�Ղɗ���ł��邱�Ƃł��B
- Hibernate�͐V���ȃ��b�N�̐U�镑����lj����Ă��炸�A����JDBC�R�l�N�V������JTA���\�[�X��g�p���܂��B
- JDBC�AANSI�A����уf�[�^�x�[�X�Ǘ��V�X�e���iDBMS�j�̃g�����U�N�V���������̎d�l��
- �������Ԃ����ĕ����邱�Ƃ����������܂��B
+ Hibernateと同時実行制御について最も重要な点は、容易に理解できることです。
+ Hibernateは新たなロックの振る舞いを追加しておらず、直接JDBCコネクションとJTAリソースを使用します。
+ JDBC、ANSI、およびデータベース管理システム(DBMS)のトランザクション分離の仕様を
+ 少し時間をかけて勉強することを強く推奨します。
</para>
<para>
- Hibernate�̓�������̃I�u�W�F�N�g���b�N���܂���B
- �A�v���P�[�V�����́A�f�[�^�x�[�X�g�����U�N�V�����̕������x����
- ��`�����U�镑������҂ł��܂��B
- �g�����U�N�V�����X�R�[�v�̃L���b�V���ł���� <literal>Session</literal> �̂��A�ŁA
- ���ʎq��N�G���ɂ�茟�������G���e�B�e�B�̓��s�[�^�u�����[�h�ɂȂ�܂�
- �i�X�J���[�l��Ԃ��悤�ȃ��|�[�g�N�G���͈Ⴂ�܂��j�B
+ Hibernateはメモリ内のオブジェクトをロックしません。
+ アプリケーションは、データベーストランザクションの分離レベルで
+ 定義した振る舞いを期待できます。
+ トランザクションスコープのキャッシュでもある <literal>Session</literal> のお陰で、
+ 識別子やクエリにより検索したエンティティはリピータブルリードになります
+ (スカラー値を返すようなレポートクエリは違います)。
</para>
<para>
- �o�[�W���j���O�ɂ�鎩���I�Ȋy�ϓI�������s����ɉ����āA
- <literal>SELECT FOR UPDATE</literal> ����g�p���āA
- �s��ߊϓI���b�N���邽�߂́i�}�C�i�[�ȁjAPI����܂��B
- �y�ϓI�������s����Ƃ���API�ɂ��ẮA���̏͂̌�̂ق��ŋc�_���܂��B
+ バージョニングによる自動的な楽観的同時実行制御に加えて、
+ <literal>SELECT FOR UPDATE</literal> 文を使用して、
+ 行を悲観的ロックするための(マイナーな)APIも提供します。
+ 楽観的同時実行制御とこのAPIについては、この章の後のほうで議論します。
</para>
<para>
- �f�[�^�x�[�X�g�����U�N�V�����Ⓑ���Θb�iconversation�A�����O�g�����U�N�V�����j�����łȂ��A
- <literal>Configuration</literal>�A<literal>SessionFactory</literal>�A�����
+ データベーストランザクションや長い対話(conversation、ロングトランザクション)だけでなく、
+ <literal>Configuration</literal>、<literal>SessionFactory</literal>、および
<literal>Session</literal>
- �Ƃ������x��Hibernate���s���������s����̋c�_��n�߂܂��B
+ という粒度でHibernateが行う同時実行制御の議論を始めます。
</para>
<sect1 id="transactions-basics" revision="1">
- <title>session�X�R�[�v��transaction�X�R�[�v</title>
+ <title>sessionスコープとtransactionスコープ</title>
<para>
- <literal>SessionFactory</literal> �͐������邱�Ƃ������ŁA
- �X���b�h�Z�[�t�ȃI�u�W�F�N�g�ł��B
- ����āA�A�v���P�[�V�����̂��ׂẴX���b�h�ŋ��L���ׂ��ł��B
- �ʏ�A�A�v���P�[�V�����̋N�����ɁA
- <literal>Configuration</literal> �C���X�^���X����P�x�����������܂��B
+ <literal>SessionFactory</literal> は生成することが高価で、
+ スレッドセーフなオブジェクトです。
+ よって、アプリケーションのすべてのスレッドで共有すべきです。
+ 通常、アプリケーションの起動時に、
+ <literal>Configuration</literal> インスタンスから1度だけ生成します。
</para>
<para>
- <literal>Session</literal> �͍����ł͂Ȃ��A�X���b�h�Z�[�t�ȃI�u�W�F�N�g�ł����܂���B
- ����āA�P�̗v����P�̑Θb�A�P�̍�ƒP�ʁiunit of work�j�ɑ��ĂP�x�����g���A
- ���̌�Ŏ̂Ă�ׂ��ł��B
- <literal>Session</literal> �͕K�v�ɂȂ�܂ŁA
- JDBC <literal>Connection</literal>�i������� <literal>DataSource</literal>�j��l�����܂���B
- �䂦�ɁA���ۂɎg�p����Ƃ��܂Ń��\�[�X�����܂���B
+ <literal>Session</literal> は高価ではなく、スレッドセーフなオブジェクトでもありません。
+ よって、1つの要求や1つの対話、1つの作業単位(unit of work)に対して1度だけ使い、
+ その後で捨てるべきです。
+ <literal>Session</literal> は必要になるまで、
+ JDBC <literal>Connection</literal>(もしくは <literal>DataSource</literal>)を獲得しません。
+ ゆえに、実際に使用するときまでリソースを消費しません。
</para>
<para>
- ���̏��������邽�߂ɁA �f�[�^�x�[�X�g�����U�N�V�����ɂ��Ă�l���Ȃ���Ȃ�܂���B
- �f�[�^�x�[�X��̃��b�N�̋������Ȃ����邽�߂ɁA
- �f�[�^�x�[�X�g�����U�N�V�����͉\�Ȍ���Z������ׂ��ł��B
- �����f�[�^�x�[�X�g�����U�N�V�����́A�A�v���P�[�V�����̍���������s����j�Q���܂��B
- �䂦�ɁA���[�U�[���l���Ă���ԁi��ƒP�ʂ���������܂Łj�f�[�^�x�[�X�g�����U�N�V������
- �J�����܂܂ɂ���̂́A�����Ă��̏ꍇ�悢�v�Ƃ͂����܂���B
+ この状況を完了させるために、 データベーストランザクションについても考えなければなりません。
+ データベース内のロックの競合を少なくするために、
+ データベーストランザクションは可能な限り短くするべきです。
+ 長いデータベーストランザクションは、アプリケーションの高い並列実行性を阻害します。
+ ゆえに、ユーザーが考えている間(作業単位が完了するまで)データベーストランザクションを
+ 開いたままにするのは、たいていの場合よい設計とはいえません。
</para>
<para>
- ��ƒP�ʂƂ����X�R�[�v�Ƃ͉��ł��傤���H
- �P��Hibernate <literal>Session</literal> �́A
- �������̃f�[�^�x�[�X�g�����U�N�V������܂����邱�Ƃ��ł���ł��傤���H
- �܂��́A�X�R�[�v�ƈ�Έ�̊W�ł��傤���H
- ���� <literal>Session</literal> ��J���A����ׂ��ł��傤���H
- �����āA�f�[�^�x�[�X�g�����U�N�V�������E��ǂ̂悤�ɕ�����̂ł��傤���H
+ 作業単位というスコープとは何でしょうか?
+ 1つのHibernate <literal>Session</literal> は、
+ いくつかのデータベーストランザクションをまたがることができるでしょうか?
+ または、スコープと一対一の関係でしょうか?
+ いつ <literal>Session</literal> を開き、閉じるべきでしょうか?
+ そして、データベーストランザクション境界をどのように分けるのでしょうか?
</para>
<sect2 id="transactions-basics-uow" revision="1">
- <title>��ƒP�ʁiUnit of work�j</title>
+ <title>作業単位(Unit of work)</title>
<para>
- �P�ڂ́A<emphasis>session-per-operation</emphasis> �A���`�p�^�[����g���Ă͂����܂���B
- ���Ȃ킿�A�P�̃X���b�h�̒��ŁA�P���ȃf�[�^�x�[�X�Ăяo���̂��т�
- <literal>Session</literal> ��J���āA���Ă͂����܂���I
- ������A�f�[�^�x�[�X�g�����U�N�V�����ɂ��Ă���l�ł��B
- �A�v���P�[�V�������̃f�[�^�x�[�X�Ăяo���́A
- �v�悳�ꂽ�V�[�P���X�iplanned sequence�j��g���A
- �A�g�~�b�N�ȍ�ƒP�ʂɕ��ނ���܂��B
- �i�P��SQL�����ƂɃR�~�b�g���鎩���R�~�b�g���A
- �g���Ȃ��Ƃ����Ӗ��ł���邱�Ƃɒ��ӂ��Ă��������B
- �����R�~�b�g�́ASQL�R���\�[���ŃA�h�z�b�N�ȍ�Ƃ���ۂɎg����̂ł��B
- Hibernate�͒����Ɏ����R�~�b�g���[�h���ɂ��܂��B
- ������́A�A�v���P�[�V�����T�[�o�[�����������邱�Ƃ���҂��܂��B�j
- �f�[�^�x�[�X�g�����U�N�V�����̓I�v�V�����ł͂���܂���B
- �f�[�^�x�[�X�Ƃ̂��ׂĂ̒ʐM�́A�f�[�^�̓ǂݍ��݂ł����Ă�A�������݂ł����Ă�A
- �g�����U�N�V�����̒��ōs��Ȃ���Ȃ�܂���B
- �������ƁA�f�[�^�ǂݍ��݂ɑ��āA�����R�~�b�g�͔���ׂ��ł��B
- �Ȃ��Ȃ�A�����̏����ȃg�����U�N�V�����́A���m�ɒ�`���ꂽ�P�̍�ƒP�ʂƔ�ׂāA
- �p�t�H�[�}���X���悭�Ȃ邱�Ƃ͂���܂���B
- ��҂͕ێ琫��g�������肷����Ă��܂��B
+ 1つ目は、<emphasis>session-per-operation</emphasis> アンチパターンを使ってはいけません。
+ すなわち、1つのスレッドの中で、単純なデータベース呼び出しのたびに
+ <literal>Session</literal> を開いて、閉じてはいけません!
+ もちろん、データベーストランザクションについても同様です。
+ アプリケーション中のデータベース呼び出しは、
+ 計画されたシーケンス(planned sequence)を使い、
+ アトミックな作業単位に分類されます。
+ (1つのSQL文ごとにコミットする自動コミットが、
+ 使われないという意味でもあることに注意してください。
+ 自動コミットは、SQLコンソールでアドホックな作業をする際に使うものです。
+ Hibernateは直ちに自動コミットモードを無効にします。
+ もしくは、アプリケーションサーバーが無効化することを期待します。)
+ データベーストランザクションはオプションではありません。
+ データベースとのすべての通信は、データの読み込みであっても、書き込みであっても、
+ トランザクションの中で行わなければなりません。
+ 説明すると、データ読み込みに対して、自動コミットは避けるべきです。
+ なぜなら、多数の小さなトランザクションは、明確に定義された1つの作業単位と比べて、
+ パフォーマンスがよくなることはありません。
+ 後者は保守性や拡張性もよりすぐれています。
</para>
<para>
- �}���`���[�U�[�̃N���C�A���g�^�T�[�o�[�A�v���P�[�V�����̒��ŁA
- �ł�悭�g����p�^�[���́A<emphasis>session-per-request</emphasis> �ł��B
- ���̃��f���̒��ł́A
- �N���C�A���g����iHibernate�i�����w�����삷��j�T�[�o�[�փ��N�G�X�g�������A
- �V����Hibernate <literal>Session</literal> ���J����܂��B
- �����āA���̍�ƒP�ʂ̒��ł��ׂẴf�[�^�x�[�X���������s����܂��B
- ��Ƃ����������i�����āA�N���C�A���g�ւ̃��X�|���X�������ł����j���_�ŁA
- session ��t���b�V�����A���܂��B
- �N���C�A���g�̗v���������邽�߂ɁA�P�̃f�[�^�x�[�X�g�����U�N�V������g�p����ł��傤�B
- <literal>Session</literal> ��J���A����ۂɁA
- �f�[�^�x�[�X�g�����U�N�V������J�n���A�R�~�b�g���܂��B
- ��̊W�͈�Έ�ł��B
- ���̃��f���͑����̃A�v���P�[�V�����Ɋ��S�ɓK�����܂��B
+ マルチユーザーのクライアント/サーバーアプリケーションの中で、
+ 最もよく使われるパターンは、<emphasis>session-per-request</emphasis> です。
+ このモデルの中では、
+ クライアントから(Hibernate永続化層が動作する)サーバーへリクエストが送られ、
+ 新しいHibernate <literal>Session</literal> が開かれます。
+ そして、この作業単位の中ですべてのデータベース処理が実行されます。
+ 作業が完了した(そして、クライアントへのレスポンスが準備できた)時点で、
+ session をフラッシュし、閉じます。
+ クライアントの要求を処理するために、1つのデータベーストランザクションを使用するでしょう。
+ <literal>Session</literal> を開き、閉じる際に、
+ データベーストランザクションを開始し、コミットします。
+ 二つの関係は一対一です。
+ このモデルは多くのアプリケーションに完全に適合します。
</para>
<para>
- �ȍ~�̎����Ƀ`�������W���Ă��������B
- <literal>Session</literal> �����A�g�����U�N�V�����𐳊m�ɊJ�n���A�I��点�邾���łȂ��A
- �f�[�^�A�N�Z�X�������₷������K�v������܂��B
- ���N�G�X�g���T�[�o�[�Ƀq�b�g�����ۂƁA���X�|���X�𑗐M����O�ɁA���s�����interceptor
- �i�Ⴆ�A<literal>ServletFilter</literal>�j��g���āA��ƒP�ʂ̋��E���������̂����z�I�ł��B
- <literal>ThreadLocal</literal> �ϐ���g���āA
- ���N�G�X�g��������X���b�h�� <literal>Session</literal> ���т��邱�Ƃ𐄏����܂��B
- ����ɂ��A�X���b�h��Ŏ��s����邷�ׂẴR�[�h�ŁA
- �istatic�ϐ��ɃA�N�Z�X����悤�Ɂj�ȒP�� <literal>Session</literal> �ɃA�N�Z�X�ł���悤�ɂȂ�܂��B
- �I�����f�[�^�x�[�X�g�����U�N�V�������E�̋@�\����ŁA<literal>ThreadLocal</literal>
- �ϐ��̒��Ƀg�����U�N�V�����R���e�L�X�g��ێ����邩�����܂���B
- ���̎����p�^�[���́A<emphasis>ThreadLocal Session</emphasis> �����
- <emphasis>Open Session in View</emphasis> �Ƃ������O�Œm���Ă��܂��B
- �{�h�L�������g�Ő�Ɍ����� <literal>HibernateUtil</literal> �w���p�[�N���X��g�����邱�ƂŁA
- ���̃p�^�[����e�ՂɎ����ł��܂��B
- ������Ainterceptor �����������@�����A����Z�b�g�A�b�v����K�v������܂��B
- Hibernate��Web�T�C�g�ɂ���tips�Ɨ��Q�Ƃ��Ă��������B
+ 以降の実装にチャレンジしてください。
+ <literal>Session</literal> を持ち、トランザクションを正確に開始し、終わらせるだけでなく、
+ データアクセス操作も得やすくする必要があります。
+ リクエストがサーバーにヒットした際と、レスポンスを送信する前に、実行されるinterceptor
+ (例えば、<literal>ServletFilter</literal>)を使って、作業単位の境界を実装するのが理想的です。
+ <literal>ThreadLocal</literal> 変数を使って、
+ リクエストを処理するスレッドに <literal>Session</literal> を結びつけることを推奨します。
+ これにより、スレッド内で実行されるすべてのコードで、
+ (static変数にアクセスするように)簡単に <literal>Session</literal> にアクセスできるようになります。
+ 選択したデータベーストランザクション境界の機構次第で、<literal>ThreadLocal</literal>
+ 変数の中にトランザクションコンテキストを保持するかもしれません。
+ この実装パターンは、<emphasis>ThreadLocal Session</emphasis> および
+ <emphasis>Open Session in View</emphasis> という名前で知られています。
+ 本ドキュメントで先に見せた <literal>HibernateUtil</literal> ヘルパークラスを拡張することで、
+ このパターンを容易に実装できます。
+ もちろん、interceptor を実装する方法を見つけ、環境をセットアップする必要があります。
+ HibernateのWebサイトにあるtipsと例を参照してください。
</para>
<para>
- �ȍ~�̎����Ƀ`�������W���Ă��������B
- Hibernate�͒P���Ȃ��̃p�^�[���̂��߂ɁA�\�ߑg�ݍ��܂ꂽ
- �ucurrent session�v�̊Ǘ�����܂��B
- �T�[�o�[���N�G�X�g��������ۂ̓g�����U�N�V������J�n���Ȃ���Ȃ�܂���B
- �����āA���X�|���X��N���C�A���g�ɑ��M����O�Ƀg�����U�N�V������I��点�܂��B
- �D���ȕ��@�Ŏ����ł��܂��B��ʓI�ȉ���� <literal>ServletFilter</literal> ��
- �T�[�r�X���\�b�h��|�C���g�J�b�g����AOP�C���^�[�Z�v�^�[�A
- proxy/interception �R���e�i�ł��B
- EJB�R���e�i��EJB�Z�b�V�����r�[����g�����U�N�V�������E�Ƃ���
- �A�X�y�N�g��N���X�J�b�g��������̕W���I�ȕ��@�ł��iCMT�ɂ��錾�I�j�B
- �v���O�����ɂ��g�����U�N�V�������E��g���ƌ��߂��ꍇ�A
- �ȒP�Ɏg�����߁A�݊����̂���R�[�h�ɂ��邽�߂ɁA
- ���̏͂̌�̂ق��ɂ���Hibernate <literal>Transaction</literal> API�̂ق����悢�ł��B
+ 以降の実装にチャレンジしてください。
+ Hibernateは単純なこのパターンのために、予め組み込まれた
+ 「current session」の管理を提供します。
+ サーバーリクエストを処理する際はトランザクションを開始しなければなりません。
+ そして、レスポンスをクライアントに送信する前にトランザクションを終わらせます。
+ 好きな方法で実現できます。一般的な解決策は <literal>ServletFilter</literal> や
+ サービスメソッドをポイントカットしてAOPインターセプター、
+ proxy/interception コンテナです。
+ EJBコンテナはEJBセッションビーンをトランザクション境界として
+ アスペクトをクロスカットする実装の標準的な方法です(CMTによる宣言的)。
+ プログラムによるトランザクション境界を使うと決めた場合、
+ 簡単に使うため、互換性のあるコードにするために、
+ この章の後のほうにあるHibernate <literal>Transaction</literal> APIのほうがよいです。
</para>
<para>
- �A�v���P�[�V�����̃R�[�h�́A�K�v�ȂƂ��ɂǂ��ł�A����ł�A
- �P�� <literal>sessionFactory.getCurrentSession()</literal> ��Ăяo��������
- �u���݂̃Z�b�V�����v�ɃA�N�Z�X�ł��܂��B
- ���݂̃f�[�^�x�[�X�g�����U�N�V�����ւ� <literal>�Z�b�V����</literal> ���Ɏ擾���܂��B
- ���\�[�X�E���[�J���Ȋ��A�������JTA����\�����Ȃ���Ȃ�܂���
- �i<xref linkend="architecture-current-session"/> ��Q�Ƃ��Ă��������j�B
+ アプリケーションのコードは、必要なときにどこでも、何回でも、
+ 単に <literal>sessionFactory.getCurrentSession()</literal> を呼び出すだけで
+ 「現在のセッション」にアクセスできます。
+ 現在のデータベーストランザクションへの <literal>セッション</literal> を常に取得します。
+ リソース・ローカルな環境、もしくはJTA環境を構成しなければなりません
+ (<xref linkend="architecture-current-session"/> を参照してください)。
</para>
<para>
- �Ƃ��ǂ��A�u�r���[��`�悷��v�܂� <literal>�Z�b�V����</literal>
- �ƃf�[�^�x�[�X�g�����U�N�V�����̃X�R�[�v��g������ƕ֗��Ȃ��Ƃ�����܂��B
- ����́A�v���̏����ƕ`��̃t�F�[�Y���Ă���
- �T�[�u���b�g�A�v���P�[�V�����ɂ����ē��ɖ𗧂��܂��B
- �Ǝ��̃C���^�[�Z�v�^���������A
- �r���[��`�悷��܂Ńf�[�^�x�[�X�g�����U�N�V������g������̂͊ȒP�ł��B
- �������A�R���e�i�Ǘ��g�����U�N�V������EJB�ɗ���ꍇ�́A�ȒP�ɂ͂ł��܂���B
- �Ȃ��Ȃ�A�r���[�̕`���J�n����O�ɁAEJB�̃��\�b�h�����^�[�������ۂɁA
- �g�����U�N�V�������������邽�߂ł��B
- ���� <emphasis>Open Session in View</emphasis> �p�^�[���Ɋ֘A����q���g�Ɨ�ɂ��ẮA
- Hibernate��Web�T�C�g��t�H�[������Q�Ƃ��Ă��������B
+ ときどき、「ビューを描画する」まで <literal>セッション</literal>
+ とデータベーストランザクションのスコープを拡張すると便利なことがあります。
+ これは、要求の処理と描画のフェーズを分けている
+ サーブレットアプリケーションにおいて特に役立ちます。
+ 独自のインターセプタを実装すれば、
+ ビューを描画するまでデータベーストランザクションを拡張するのは簡単です。
+ しかし、コンテナ管理トランザクションのEJBに頼る場合は、簡単にはできません。
+ なぜなら、ビューの描画を開始する前に、EJBのメソッドがリターンした際に、
+ トランザクションが完了するためです。
+ この <emphasis>Open Session in View</emphasis> パターンに関連するヒントと例については、
+ HibernateのWebサイトやフォーラムを参照してください。
</para>
</sect2>
<sect2 id="transactions-basics-apptx" revision="1">
- <title>�����Θb</title>
+ <title>長い対話</title>
<para>
- session-per-request�p�^�[���́A��ƒP�ʂ�v����ۂɖ𗧂l���Ƃ��������ł͂���܂���B
- �����̃r�W�l�X�v���Z�X�́A���[�U�[�Ƃ̈�A�̑��ݍ�p�S�̂�v�����܂��B
- ���̑��ݍ�p�ɂ́A�f�[�^�x�[�X�A�N�Z�X���܂܂�܂��B
+ session-per-requestパターンは、作業単位を設計する際に役立つ考えというだけではありません。
+ 多くのビジネスプロセスは、ユーザーとの一連の相互作用全体を要求します。
+ その相互作用には、データベースアクセスが含まれます。
- Web�ƃG���^�[�v���C�Y�A�v���P�[�V�����ł́A�f�[�^�x�[�X�g�����U�N�V������
- ���[�U�Ƃ̑��ݍ�p�ɂ܂œn�邱�Ƃ͋�����܂���B
+ Webとエンタープライズアプリケーションでは、データベーストランザクションが
+ ユーザとの相互作用にまで渡ることは許されません。
- ���̗��悭�l���Ă݂Ă��������B
+ 次の例をよく考えてみてください。
</para>
<itemizedlist>
<listitem>
<para>
- �_�C�A���O�̍ŏ��̉�ʂ��J���A�X�� <literal>Session</literal>
- �ƃf�[�^�x�[�X�g�����U�N�V�����̒��Ń��[�h���ꂽ�f�[�^���[�U�[�Ɍ����܂��B
- ���[�U�[�̓I�u�W�F�N�g���R�ɏC���ł��܂��B
+ ダイアログの最初の画面が開き、個々の <literal>Session</literal>
+ とデータベーストランザクションの中でロードされたデータをユーザーに見せます。
+ ユーザーはオブジェクトを自由に修正できます。
</para>
</listitem>
<listitem>
<para>
- 5����Ƀ��[�U�[�́uSave�v��N���b�N���A�C�����i���������̂���҂��܂��B
- �܂��A���̏���ҏW�����͎̂����P�l�����ŁA
- �C���̃R���t���N�g�͔������Ȃ��Ɗ��҂��܂��B
+ 5分後にユーザーは「Save」をクリックし、修正が永続化されるのを期待します。
+ また、この情報を編集したのは自分1人だけで、
+ 修正のコンフリクトは発生しないと期待します。
</para>
</listitem>
</itemizedlist>
<para>
- ���̍�ƒP�ʂ�i���[�U�[�̎��_�Łj������ <emphasis>�Θb</emphasis>
- �i������́A<emphasis>�A�v���P�[�V�����g�����U�N�V����</emphasis> �j�ƌĂт܂��B
- �A�v���P�[�V�����ɂ�������������@�͂�������܂��B
+ この作業単位を(ユーザーの視点で)長期の <emphasis>対話</emphasis>
+ (もしくは、<emphasis>アプリケーショントランザクション</emphasis> )と呼びます。
+ アプリケーションにこれを実装する方法はたくさんあります。
</para>
<para>
- �ŏ��Ɏv���������́A���[�U�[���l���Ă���ԁA<literal>Session</literal>
- �ƃf�[�^�x�[�X�g�����U�N�V������J�����܂܂ɂ��Ă������Ƃł��B
- �����ɏC�����ꂸ�A�����ƌ��q�����ۏ����悤�ɁA
- �f�[�^�x�[�X��̃��b�N�͕ێ������܂܂ɂ��܂��B
- ������A����̓A���`�p�^�[���ł��B
- �Ȃ��Ȃ�A���b�N�̋�������������ƁA
- �A�v���P�[�V�������������[�U�[���ɉ����ăX�P�[���A�b�v�ł��Ȃ��Ȃ邩��ł��B
+ 最初に思いつく実装は、ユーザーが考えている間、<literal>Session</literal>
+ とデータベーストランザクションを開いたままにしておくことです。
+ 同時に修正されず、分離と原子性が保証されるように、
+ データベース内のロックは保持したままにします。
+ もちろん、これはアンチパターンです。
+ なぜなら、ロックの競合が発生すると、
+ アプリケーションが同時ユーザー数に応じてスケールアップできなくなるからです。
</para>
<para>
- ���炩�ɁA�Θb��������邽�߂ɂ́A
- �������̃f�[�^�x�[�X�g�����U�N�V������g�p����ׂ��ł��B
- ���̏ꍇ�A�r�W�l�X�v���Z�X�̕�����ێ����邱�Ƃ́A
- �A�v���P�[�V�����w�̐Ӗ��̂P�ɂȂ�܂��B
- �P�̑Θb�́A
- �ʏ킢�����̃f�[�^�x�[�X�g�����U�N�V�����ɋy�т܂��B
- �f�[�^�x�[�X�g�����U�N�V�����̂P�̂݁i�Ō�̂P�j���X�V�����f�[�^��ۑ����A
- ���̓f�[�^��ǂނ����ł���A����̓A�g�~�b�N�ł�
- �i�Ⴆ�A�������̗v���^������J��Ԃ��E�B�U�[�h�`���̃_�C�A���O�j�B
- ����͕������A���������ق����ȒP�ł��B
- Hibernate�̋@�\��g���̂ł���A���ɊȒP�ł��B
+ 明らかに、対話を実装するためには、
+ いくつかのデータベーストランザクションを使用するべきです。
+ この場合、ビジネスプロセスの分離を維持することは、
+ アプリケーション層の責務の1つになります。
+ 1つの対話は、
+ 通常いくつかのデータベーストランザクションに及びます。
+ データベーストランザクションの1つのみ(最後の1つ)が更新したデータを保存し、
+ 他はデータを読むだけであれば、それはアトミックです
+ (例えば、いくつかの要求/応答を繰り返すウィザード形式のダイアログ)。
+ これは聞くより、実装したほうが簡単です。
+ Hibernateの機能を使うのであれば、特に簡単です。
</para>
<itemizedlist>
<listitem>
<para>
- <emphasis>�����o�[�W���j���O</emphasis>
- - Hibernate�͎����I�Ɋy�ϓI�������s���䂪�ł��܂��B
- ���[�U�[���l���Ă���Ԃɓ����ɏC�����������ꍇ�A�����I�Ɍ��o�ł��܂��B
- �ʏ�A�Θb�̏I�����Ƀ`�F�b�N���邾���ł��B
+ <emphasis>自動バージョニング</emphasis>
+ - Hibernateは自動的に楽観的同時実行制御ができます。
+ ユーザーが考えている間に同時に修正がおきた場合、自動的に検出できます。
+ 通常、対話の終了時にチェックするだけです。
</para>
</listitem>
<listitem>
<para>
- <emphasis>�����iDetached�j�I�u�W�F�N�g</emphasis> - ���łɋc�_����
- <emphasis>session-per-request</emphasis> �p�^�[����g���ƌ��肵���ꍇ�A
- ���[�h���ꂽ���ׂẴC���X�^���X�́A���[�U���l���Ă���Ԃ́A
- �Z�b�V�������番�����ꂽ��ԂɂȂ�܂��B
- �I�u�W�F�N�g��Z�b�V�����ɍĒlj����A�C����i�����ł��܂��B
- ����� <emphasis>session-per-request-with-detached-objects</emphasis>
- �p�^�[���ƌĂт܂��B
- �����o�[�W���j���O��g�����ƂŁA�����ɍs����C�����ł��܂��B
+ <emphasis>分離(Detached)オブジェクト</emphasis> - すでに議論した
+ <emphasis>session-per-request</emphasis> パターンを使うと決定した場合、
+ ロードされたすべてのインスタンスは、ユーザが考えている間は、
+ セッションから分離された状態になります。
+ オブジェクトをセッションに再追加し、修正を永続化できます。
+ これを <emphasis>session-per-request-with-detached-objects</emphasis>
+ パターンと呼びます。
+ 自動バージョニングを使うことで、同時に行われる修正を分離できます。
</para>
</listitem>
<listitem>
<para>
- <emphasis>�g���i������́A�����j�Z�b�V����</emphasis>
- - Hibernate�� <literal>Session</literal> �́A
- �f�[�^�x�[�X�g�����U�N�V������R�~�b�g������A
- ���Ō��т��Ă���JDBC�R�l�N�V������ؒf�ł��܂��B
- �����āA�N���C�A���g����̐V�����v�������������ۂɁA�Đڑ��ł��܂��B
- ���̃p�^�[���́A<emphasis>session-per-conversation</emphasis>
- �Ƃ������Œm���Ă���A�I�u�W�F�N�g��Z�b�V�����֍Ēlj����邱�Ƃ����s�v�ɂ��܂��B
- �����o�[�W���j���O��g�����ƂŁA�����ɍs����C�����ł��܂��B
+ <emphasis>拡張(もしくは、長い)セッション</emphasis>
+ - Hibernateの <literal>Session</literal> は、
+ データベーストランザクションをコミットした後、
+ 裏で結びついているJDBCコネクションを切断できます。
+ そして、クライアントからの新しい要求が発生した際に、再接続できます。
+ このパターンは、<emphasis>session-per-conversation</emphasis>
+ という名で知られており、オブジェクトをセッションへ再追加することさえ不要にします。
+ 自動バージョニングを使うことで、同時に行われる修正を分離できます。
- �ʏ� <literal>Session</literal> �����I�Ƀt���b�V���������A
- �����I�Ƀt���b�V�����܂��B
+ 通常 <literal>Session</literal> を自動的にフラッシュさせず、
+ 明示的にフラッシュします。
</para>
</listitem>
</itemizedlist>
<para>
- <emphasis>session-per-request-with-detached-objects</emphasis> ��
- <emphasis>session-per-conversation</emphasis> �̂Q�́A
- ���_�ƌ��_�����Ă��܂��B
- ����ɂ��ẮA���̏͂̌�̂ق��ŁA�y�ϓI�������s����̕����̒��ŋc�_���܂��B
+ <emphasis>session-per-request-with-detached-objects</emphasis> と
+ <emphasis>session-per-conversation</emphasis> の2つは、
+ 利点と欠点を持っています。
+ これについては、この章の後のほうで、楽観的同時実行制御の文脈の中で議論します。
</para>
</sect2>
<sect2 id="transactions-basics-identity">
- <title>�I�u�W�F�N�g���ʎq��l����</title>
+ <title>オブジェクト識別子を考える</title>
<para>
- �A�v���P�[�V�����́A�Q�̈قȂ� <literal>Session</literal> ����
- �����i����Ԃɓ����ɃA�N�Z�X�ł��܂��B
- �������A�Q�� <literal>Session</literal> �C���X�^���X��
- �i�����N���X�̂P�̃C���X�^���X���L���邱�Ƃ͂ł��܂���B
- �䂦�ɁA���ʎq�ɂ͂Q�̈قȂ�T�O������Ƃ������ƂɂȂ�܂��B
+ アプリケーションは、2つの異なる <literal>Session</literal> から
+ 同じ永続状態に同時にアクセスできます。
+ しかし、2つの <literal>Session</literal> インスタンスが
+ 永続性クラスの1つのインスタンスを共有することはできません。
+ ゆえに、識別子には2つの異なる概念があるということになります。
</para>
<variablelist spacing="compact">
<varlistentry>
- <term>�f�[�^�x�[�X���ʎq</term>
+ <term>データベース識別子</term>
<listitem>
<para>
<literal>foo.getId().equals( bar.getId() )</literal>
@@ -301,7 +303,7 @@
</listitem>
</varlistentry>
<varlistentry>
- <term>JVM���ʎq</term>
+ <term>JVM識別子</term>
<listitem>
<para>
<literal>foo==bar</literal>
@@ -311,105 +313,105 @@
</variablelist>
<para>
- <emphasis>�X��</emphasis> <literal>Session</literal> �ɒlj����ꂽ�I�u�W�F�N�g�ɂƂ���
- �i���Ȃ킿�A�P�� <literal>Session</literal> �̃X�R�[�v�̒��ł́j�A�Q�̊T�O�͓����ł��B
- �f�[�^�x�[�X���ꐫ��JVM���ꐫ����v���邱�Ƃ�AHibernate���ۏ��܂��B
- �������A�A�v���P�[�V�������Q�̈قȂ�Z�b�V��������
- �u�����v�i�i�������ʎq�́j�r�W�l�X�I�u�W�F�N�g�ɓ����ɃA�N�Z�X�������A
- �Q�̃C���X�^���X�͎��ۂɁiJVM���ʎq���j�u�قȂ�v�܂��B
- �y�ϓI�A�v���[�`�ɂ���āA�i�����o�[�W���j���O�́j�t���b�V���^�R�~�b�g����
- �R���t���N�g��������܂��B
+ <emphasis>個々の</emphasis> <literal>Session</literal> に追加されたオブジェクトにとって
+ (すなわち、1つの <literal>Session</literal> のスコープの中では)、2つの概念は同じです。
+ データベース同一性とJVM同一性が一致することを、Hibernateが保証します。
+ しかし、アプリケーションが2つの異なるセッションから
+ 「同じ」(永続性識別子の)ビジネスオブジェクトに同時にアクセスする限り、
+ 2つのインスタンスは実際に(JVM識別子が)「異なり」ます。
+ 楽観的アプローチによって、(自動バージョニングの)フラッシュ/コミット時に
+ コンフリクトが解決されます。
</para>
<para>
- ���̃A�v���[�`�ł́AHibernate�ƃf�[�^�x�[�X�ɓ������s�ɂ��Ă̐S�z���c��܂��B
- ����ŁA�ō��̃X�P�[���r���e�B������܂��B
- �Ȃ��Ȃ�A�P�X���b�h�̍�ƒP�ʂ̒��ň�Ӑ����ۏ����A
- �����ȃ��b�N�⓯�������s�v�ɂȂ邽�߂ł��B
- <literal>Session</literal> ���ƂɂP�̃X���b�h��\��t�������A
- �A�v���P�[�V�����̓r�W�l�X�I�u�W�F�N�g��synchronize����K�v�͂���܂���B
- <literal>Session</literal> ��ł́A�A�v���P�[�V�����̓I�u�W�F�N�g���r���邽�߂ɁA
- <literal>==</literal> ����S�Ɏg�p�ł��܂��B
+ このアプローチでは、Hibernateとデータベースに同時実行についての心配が残ります。
+ 一方で、最高のスケーラビリティが提供されます。
+ なぜなら、1スレッドの作業単位の中で一意性が保証されれば、
+ 高価なロックや同期化が不要になるためです。
+ <literal>Session</literal> ごとに1つのスレッドを貼り付ける限り、
+ アプリケーションはビジネスオブジェクトをsynchronizeする必要はありません。
+ <literal>Session</literal> 内では、アプリケーションはオブジェクトを比較するために、
+ <literal>==</literal> を安全に使用できます。
</para>
<para>
- ����ǂ�A<literal>Session</literal> �̊O�� <literal>==</literal>
- ��g���A�v���P�[�V�����́A�\�����Ȃ����ʂɑ������܂��B
- ����͗\�����Ȃ��ꏊ�ŋN���肦�܂��B
- �Ⴆ�A�Q�̕����C���X�^���X�� <literal>Set</literal> ��
- put�����Ƃ��Ȃǂł��B
- �����Ƃ�����f�[�^�x�[�X���ʎq�����܂��i���Ȃ킿�A�����s��\���܂��j�B
- �������A������Ԃ̃C���X�^���X��JVM���ʎq�͓��R�ۏ���܂���B
- �J���҂́A�i�����N���X�� <literal>equals()</literal> �� <literal>hashCode()</literal>
- ���\�b�h��I�[�o�[���C�h���A�I�u�W�F�N�g�������̊T�O��������ׂ��ł��B
- �x�����P����܂��B�������̎����Ƀf�[�^�x�[�X���ʎq��g��Ȃ��ł��������B
- ���j�[�N�ȁi���ʂ͕s�ς́j�����̑g�ݍ��킹�ł���r�W�l�X�L�[��g���Ă��������B
- ����A�ꎞ�I�u�W�F�N�g���i�������ꂽ�ꍇ�A�f�[�^�x�[�X���ʎq���ς��܂��B
- �ꎞ�I�u�W�F�N�g��i�ʏ핪���C���X�^���X�Ƌ��Ɂj <literal>Set</literal>
- �ɕێ�����ꍇ�A�n�b�V���R�[�h���ς��Ƃ������Ƃ́A<literal>Set</literal>
- �̌_���j��Ƃ������Ƃł��B
- �r�W�l�X�L�[�̂��߂̑����́A�f�[�^�x�[�X�̎�L�[�قLj��肷�ׂ��ł͂Ȃ��ł��B
- �I�u�W�F�N�g������ <literal>Set</literal> �̒��ɂ���Ԃ����A�����ۏ��ׂ��ł��B
- ���̖��̂��O��I�ȋc�_�́AHibernate��Web�T�C�g��Q�Ƃ��Ă��������B
- �܂��A�����Hibernate�̖��ł͂Ȃ��A�P��Java�I�u�W�F�N�g�̎��ʎq�ⓙ������
- �ǂ̂悤�Ɏ������ׂ����Ƃ������Ƃł��B
+ けれども、<literal>Session</literal> の外で <literal>==</literal>
+ を使うアプリケーションは、予期しない結果に遭遇します。
+ これは予期しない場所で起こりえます。
+ 例えば、2つの分離インスタンスを同じ <literal>Set</literal> に
+ putしたときなどです。
+ 両方とも同じデータベース識別子を持ちます(すなわち、同じ行を表します)。
+ しかし、分離状態のインスタンスのJVM識別子は当然保証されません。
+ 開発者は、永続性クラスの <literal>equals()</literal> と <literal>hashCode()</literal>
+ メソッドをオーバーライドし、オブジェクト等価性の概念を実装すべきです。
+ 警告が1つあります。等価性の実装にデータベース識別子を使わないでください。
+ ユニークな(普通は不変の)属性の組み合わせであるビジネスキーを使ってください。
+ もし、一時オブジェクトが永続化された場合、データベース識別子が変わります。
+ 一時オブジェクトを(通常分離インスタンスと共に) <literal>Set</literal>
+ に保持する場合、ハッシュコードが変わるということは、<literal>Set</literal>
+ の契約を破るということです。
+ ビジネスキーのための属性は、データベースの主キーほど安定すべきではないです。
+ オブジェクトが同じ <literal>Set</literal> の中にいる間だけ、安定を保証すべきです。
+ この問題のより徹底的な議論は、HibernateのWebサイトを参照してください。
+ また、これはHibernateの問題ではなく、単にJavaオブジェクトの識別子や等価性を
+ どのように実装すべきかということです。
</para>
</sect2>
<sect2 id="transactions-basics-issues">
- <title>��ʓI�Ȗ��</title>
+ <title>一般的な問題</title>
<para>
- <emphasis>session-per-user-session</emphasis> ��
- <emphasis>session-per-application</emphasis> �A���`�p�^�[��
- �͎g���Ă͂����܂���i������A�܂�ɗ�O������܂��j�B
- ���ӁF���L�̖��̂������́A���������p�^�[���Ƃ��Ă�o�����܂��B
- �v���肷��O�ɁA���̈Ӗ��𗝉���悤�ɂ��Ă��������B
+ <emphasis>session-per-user-session</emphasis> と
+ <emphasis>session-per-application</emphasis> アンチパターン
+ は使ってはいけません(もちろん、まれに例外があります)。
+ 注意:下記の問題のいくつかは、推奨されるパターンとしても出現します。
+ 設計を決定する前に、裏の意味を理解するようにしてください。
</para>
<itemizedlist>
<listitem>
<para>
- <literal>Session</literal> �̓X���b�h�Z�[�t�ł͂���܂���B
- HTTP���N�G�X�g�A�Z�b�V����Bean�ASwing���[�J�[�̂悤�ɁA
- �������s���\�Ȃ�̂� <literal>Session</literal> �C���X�^���X���L����ƁA
- ������Ԃ�����N�����܂��B
- �i��ŋc�_����j<literal>HttpSession</literal> �̒���
- Hibernate <literal>Session</literal> ��ێ�����ꍇ�A
- HttpSession�ւ̃A�N�Z�X�������邱�Ƃ�l�����ׂ��ł��B
- ����Ȃ���A���[�U�[���\�����������[�h��N���b�N����ƁA
- �����ɑ���Q�̃X���b�h�̒��ŁA���� <literal>Session</literal> ���g���܂��B
+ <literal>Session</literal> はスレッドセーフではありません。
+ HTTPリクエスト、セッションBean、Swingワーカーのように、
+ 同時実行が可能なものが <literal>Session</literal> インスタンスを共有すると、
+ 競合状態を引き起こします。
+ (後で議論する)<literal>HttpSession</literal> の中で
+ Hibernate <literal>Session</literal> を保持する場合、
+ HttpSessionへのアクセスを同期化することを考慮すべきです。
+ さもなければ、ユーザーが十分早くリロードをクリックすると、
+ 同時に走る2つのスレッドの中で、同じ <literal>Session</literal> が使われます。
</para>
</listitem>
<listitem>
<para>
- Hibernate����O�𓊂����ꍇ�́A�f�[�^�x�[�X�g�����U�N�V�������[���o�b�N���A
- ������ <literal>Session</literal> �����ׂ��ł��i�ڍׂ��ŋc�_���܂��j�B
- <literal>Session</literal> ���A�v���P�[�V�����Ɍ��ѕt�����Ă���̂ł���A
- �A�v���P�[�V�������~���ׂ��ł��B
- �f�[�^�x�[�X�g�����U�N�V�������[���o�b�N����A�r�W�l�X�I�u�W�F�N�g��
- �g�����U�N�V������J�n�����Ƃ��̏�Ԃɖ߂�܂���B
- ����́A�f�[�^�x�[�X�̏�Ԃƃr�W�l�X�I�u�W�F�N�g�͓������Ă��Ȃ����Ƃ�Ӗ����܂��B
- �ʏ킱��͖��ɂȂ�܂���B
- �Ȃ��Ȃ�A��O�͉ł��Ȃ�����ł��B
- �Ƃɂ������[���o�b�N������ɂ�蒼���ׂ��ł��B
+ Hibernateが例外を投げた場合は、データベーストランザクションをロールバックし、
+ 直ちに <literal>Session</literal> を閉じるべきです(詳細を後で議論します)。
+ <literal>Session</literal> がアプリケーションに結び付けられているのであれば、
+ アプリケーションを停止すべきです。
+ データベーストランザクションをロールバックしても、ビジネスオブジェクトは
+ トランザクションを開始したときの状態に戻りません。
+ これは、データベースの状態とビジネスオブジェクトは同期していないことを意味します。
+ 通常これは問題になりません。
+ なぜなら、例外は回復できないからです。
+ とにかくロールバックした後にやり直すべきです。
</para>
</listitem>
<listitem>
<para>
- <literal>Session</literal> �͉i���ipersistent�j��Ԃ̂��ׂẴI�u�W�F�N�g��
- �L���b�V�����܂��iHibernate�͊Ď����A�_�[�e�B��Ԃ��`�F�b�N���܂��j�B
- ����́A�����ԃZ�b�V������J�����܂܂ɂ��邩�A
- ���ɑ����̃f�[�^���[�h�������邩�����ꍇ�́A
- OutOfMemoryException����������܂Ŗ����ɑ傫���Ȃ邱�Ƃ�Ӗ����܂��B
- ����̂P�́A<literal>Session</literal> �L���b�V����Ǘ����邽�߂ɁA
- <literal>clear()</literal> �� <literal>evict()</literal> ��ĂԂ��Ƃł��B
- �������A�傫�ȃf�[�^��������K�v������Ȃ�A
- ���Ԃ�X�g�A�h�v���V�[�W����l������ׂ��ł��傤�B
- �������̉���́A<xref linkend="batch"/> �ŏЉ��Ă��܂��B
- ���[�U�[�Z�b�V�����̊ԁA<literal>Session</literal> ��J�����܂܂ɂ���Ƃ������Ƃ́A
- �f�[�^���V�N�łȂ��Ȃ�m���������Ȃ邱�Ƃ�Ӗ����܂��B
+ <literal>Session</literal> は永続(persistent)状態のすべてのオブジェクトを
+ キャッシュします(Hibernateは監視し、ダーティ状態かチェックします)。
+ これは、長い間セッションを開いたままにするか、
+ 非常に多くのデータをロードし続けるかした場合は、
+ OutOfMemoryExceptionが発生するまで無限に大きくなることを意味します。
+ 解決策の1つは、<literal>Session</literal> キャッシュを管理するために、
+ <literal>clear()</literal> か <literal>evict()</literal> を呼ぶことです。
+ しかし、大きなデータを処理する必要があるなら、
+ たぶんストアドプロシージャを考慮するべきでしょう。
+ いくつかの解決策は、<xref linkend="batch"/> で紹介されています。
+ ユーザーセッションの間、<literal>Session</literal> を開いたままにするということは、
+ データが新鮮でなくなる確率が高くなることを意味します。
</para>
</listitem>
</itemizedlist>
@@ -419,90 +421,90 @@
</sect1>
<sect1 id="transactions-demarcation">
- <title>�f�[�^�x�[�X�g�����U�N�V�������E</title>
+ <title>データベーストランザクション境界</title>
<para>
- �f�[�^�x�[�X�i������̓V�X�e���j�g�����U�N�V�����̋��E�́A��ɕK�v�ł��B
- �f�[�^�x�[�X�g�����U�N�V�����̊O�ŁA�f�[�^�x�[�X�Ƃ̒ʐM�͋N���܂���
- �i����͎����R�~�b�g���[�h�Ɋ���Ă��鑽���̊J���҂��������邩�����܂���j�B
- �ǂݍ��ނ����̑���ɂł�A������m�ȃg�����U�N�V�������E��g�p���Ă��������B
- �������x���ƃf�[�^�x�[�X�̔\�͎���ŁA����͕K�v�Ȃ��������܂��A
- ��Ƀg�����U�N�V�������E���I�Ɏw�肵�Ă�A�}�C�i�X�ʂ͑S������܂���B
+ データベース(もしくはシステム)トランザクションの境界は、常に必要です。
+ データベーストランザクションの外で、データベースとの通信は起きません
+ (これは自動コミットモードに慣れている多くの開発者を混乱させるかもしれません)。
+ 読み込むだけの操作にでも、いつも明確なトランザクション境界を使用してください。
+ 分離レベルとデータベースの能力次第で、これは必要ないかもしれませんが、
+ 常にトランザクション境界を明示的に指定しても、マイナス面は全くありません。
- �m���ɁA�P�̃f�[�^�x�[�X�g�����U�N�V�����͑����̏����ȃg�����U�N�V�������
- �i�f�[�^�̓ǂݍ��݂ł����Ă�j�p�t�H�[�}���X��������Ă��܂��B
+ 確かに、1つのデータベーストランザクションは多数の小さなトランザクションより
+ (データの読み込みであっても)パフォーマンスがすぐれています。
</para>
<para>
- J2EE���ɊǗ�����Ă��Ȃ����
- �i���Ȃ킿�A�X�^���h�A�����A�P����Web��Swing�A�v���P�[�V�����j�ł�A
- �Ǘ����ꂽ��Ԃł�AHibernate�A�v���P�[�V��������s�ł��܂��B
- �Ǘ�����Ă��Ȃ����ł́AHiberante���f�[�^�x�[�X�̃R�l�N�V�����v�[������܂��B
- �A�v���P�[�V�����J���҂́A�g�����U�N�V�������E��蓮�Őݒ肵�Ȃ���Ȃ�܂���B
- ����������ƁA�f�[�^�x�[�X�g�����U�N�V�����̊J�n�A�R�~�b�g�A���[���o�b�N��
- �J���Ҏ��g���ݒ肷��K�v������Ƃ������Ƃł��B
+ J2EE環境に管理されていない状態
+ (すなわち、スタンドアロン、単純なWebやSwingアプリケーション)でも、
+ 管理された状態でも、Hibernateアプリケーションを実行できます。
+ 管理されていない環境では、Hiberanteがデータベースのコネクションプールを提供します。
+ アプリケーション開発者は、トランザクション境界を手動で設定しなければなりません。
+ 言い換えると、データベーストランザクションの開始、コミット、ロールバックを
+ 開発者自身が設定する必要があるということです。
- �ʏ�A�Ǘ����ꂽ���ł́A�R���e�i�Ǘ��ɂ��g�����U�N�V�����iCMT�j������܂��B
- �Ⴆ�A�Z�b�V����Bean�̃f�v���C�����g�f�B�X�N���v�^�Ő錾�I�ɒ�`���A
- �g�����U�N�V������g�ݗ��Ă܂��B
- �v���O�����ɂ��g�����U�N�V�������E�͂���K�v����܂���B
+ 通常、管理された環境では、コンテナ管理によるトランザクション(CMT)が提供されます。
+ 例えば、セッションBeanのデプロイメントディスクリプタで宣言的に定義し、
+ トランザクションを組み立てます。
+ プログラムによるトランザクション境界はもう必要ありません。
</para>
<para>
- �������Ȃ���A�Ǘ�����Ă��Ȃ����\�[�X�E���[�J���Ȋ���
- JTA�Ɉˑ������V�X�e���iCMT�ł͂Ȃ�BMT�j�̗����ɁA
- �i�����w��|�[�^�u���ɕۂ̂́A�����Ζ]�܂������Ƃł��B
+ しかしながら、管理されていないリソース・ローカルな環境と
+ JTAに依存したシステム(CMTではなくBMT)の両方に、
+ 永続化層をポータブルに保つのは、しばしば望ましいことです。
- �f�v���C���̃l�C�e�B�u�̃g�����U�N�V�����V�X�e����Ăяo��
- <literal>Transaction</literal> �Ƃ������b�p�[API��Hibernate�����܂��B
- ����API��g�����͔C�ӂł����ACMT�̃Z�b�V����Bean��g��Ȃ��̂ł���A�g�����Ƃ����������܂��B
+ デプロイ環境のネイティブのトランザクションシステムを呼び出す
+ <literal>Transaction</literal> というラッパーAPIをHibernateが提供します。
+ このAPIを使うかは任意ですが、CMTのセッションBeanを使わないのであれば、使うことを強く推奨します。
</para>
<para>
- �ʏ�A<literal>Session</literal> �I���́A�S�̈قȂ�t�F�[�Y��܂݂܂��B
+ 通常、<literal>Session</literal> 終了は、4つの異なるフェーズを含みます。
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- �Z�b�V�����̃t���b�V��
+ セッションのフラッシュ
</para>
</listitem>
<listitem>
<para>
- �g�����U�N�V�����̃R�~�b�g
+ トランザクションのコミット
</para>
</listitem>
<listitem>
<para>
- �Z�b�V�����̃N���[�Y
+ セッションのクローズ
</para>
</listitem>
<listitem>
<para>
- ��O�̃n���h�����O
+ 例外のハンドリング
</para>
</listitem>
</itemizedlist>
<para>
- �Z�b�V�����̃t���b�V���ɂ��ẮA�O�̂ق��ł��łɋc�_���܂����B
- �Ǘ����ꂽ���ƊǗ�����Ă��Ȃ����̗����ɂ��āA
- �g�����U�N�V�������E�Ɨ�O�n���h�����O�����Əڂ������Ă����܂��傤�B
+ セッションのフラッシュについては、前のほうですでに議論しました。
+ 管理された環境と管理されていない環境の両方について、
+ トランザクション境界と例外ハンドリングをもっと詳しく見ていきましょう。
</para>
<sect2 id="transactions-demarcation-nonmanaged" revision="2">
- <title>�Ǘ�����Ă��Ȃ���</title>
+ <title>管理されていない環境</title>
<para>
- Hibernate�i�����w��Ǘ�����Ă��Ȃ����Ŏ�������ꍇ�́A
+ Hibernate永続化層を管理されていない環境で実装する場合は、
- �ʏ�P���ȃR�l�N�V�����v�[���i���Ȃ킿DataSource�ł͂Ȃ��j�ɂ���āA
- �f�[�^�x�[�X�R�l�N�V�����𐧌䂵�܂��B
- Hibernate�͂��̃R�l�N�V�����v�[������K�v�ȃR�l�N�V������擾���܂��B
+ 通常単純なコネクションプール(すなわちDataSourceではない)によって、
+ データベースコネクションを制御します。
+ Hibernateはそのコネクションプールから必要なコネクションを取得します。
- �Z�b�V�����^�g�����U�N�V��������̃C�f�B�I���͎��̂悤�ɂȂ�܂��B
+ セッション/トランザクション制御のイディオムは次のようになります。
</para>
<programlisting><![CDATA[// Non-managed environment idiom
@@ -525,21 +527,21 @@
}]]></programlisting>
<para>
- �����I�� <literal>Session</literal> �� <literal>flush()</literal> ��Ăяo���ׂ��ł͂Ȃ��A
- <literal>commit()</literal> ��Ăяo�����Ƃɂ��A�����I�ɓ��������������s����܂�
- �i�Z�b�V������ <xref linkend="objectstate-flushing">FlushMode</xref> �Ɉˑ����Ă���j�B
+ 明示的に <literal>Session</literal> の <literal>flush()</literal> を呼び出すべきではなく、
+ <literal>commit()</literal> を呼び出すことにより、自動的に同期化処理が実行されます
+ (セッションの <xref linkend="objectstate-flushing">FlushMode</xref> に依存している)。
- <literal>close()</literal> ��Ăяo�����Ƃɂ��A�Z�b�V�����̏I���m�ɂ��܂��B
- <literal>close()</literal> ���ÖٓI�ɍs����Ȃ��Ƃ́A
- �Z�b�V������JDBC�R�l�N�V������J�����邱�Ƃł��B
+ <literal>close()</literal> を呼び出すことにより、セッションの終わりを明確にします。
+ <literal>close()</literal> が暗黙的に行う主なことは、
+ セッションがJDBCコネクションを開放することです。
- ��L��Java�R�[�h�̓|�[�^�u���ł���A�Ǘ�����Ă��Ȃ�����JTA���̗����Ŏ��s�ł��܂��B
+ 上記のJavaコードはポータブルであり、管理されていない環境とJTA環境の両方で実行できます。
</para>
<para>
- ���K�����̂������́AHibernate�ɗ\�ߑg�ݍ��܂�Ă���
- �ucurrent session�v�R���e�L�X�g�Ǘ��ł��B
- ���t�Ő�������艺�L�����ق��������ł��傤�B
+ より適応性のある解決策は、Hibernateに予め組み込まれている
+ 「current session」コンテキスト管理です。
+ 言葉で説明するより下記を見たほうが速いでしょう。
</para>
<programlisting><![CDATA[// Non-managed environment idiom with getCurrentSession()
@@ -557,43 +559,43 @@
}]]></programlisting>
<para>
- ���K�̃A�v���P�[�V�����̒��ł́A���̂悤�ȃR�[�h�̐�[�����Č��Ȃ��ł��傤�B
- �v���I�ȁi�V�X�e���j��O�́A��Ɂu�ŏ�ʁv�ŃL���b�`���ׂ��ł��B
- ����������A�i�i�����w�ŁjHibernate�Ăяo������s����R�[�h�ƁA
- <literal>RuntimeException</literal> �𐧌䂷��
- �i�ʏ�̓N���[���A�b�v�ƏI���̂ݍs�����Ƃ��ł���j�R�[�h�́A�ʁX�̑w�̒��ɂ���܂��B
- Hibernate�ɂ��J�����g�R���e�L�X�g�Ǘ��́A���̐v���Ȃ�P���ɂ��܂��B
- �K�v�Ȃ̂́A<literal>SessionFactory</literal> �ɃA�N�Z�X���邱�Ƃ����ł��B
- ��O�����́A���̏͂̌�̂ق��ŋc�_���܂��B
+ 正規のアプリケーションの中では、このようなコードの切れ端を決して見ないでしょう。
+ 致命的な(システム)例外は、常に「最上位」でキャッチすべきです。
+ 言い換えれば、(永続化層で)Hibernate呼び出しを実行するコードと、
+ <literal>RuntimeException</literal> を制御する
+ (通常はクリーンアップと終了のみ行うことができる)コードは、別々の層の中にあります。
+ Hibernateによるカレントコンテキスト管理は、この設計をかなり単純にします。
+ 必要なのは、<literal>SessionFactory</literal> にアクセスすることだけです。
+ 例外処理は、この章の後のほうで議論します。
</para>
<para>
- ���ӁF�i�f�t�H���g�ł����j
+ 注意:(デフォルトですが)
<literal>org.hibernate.transaction.JDBCTransactionFactory</literal>
- ��I����ׂ��ł��B
- ��2�̗p��Ƃ��ẮA
- <literal>hibernate.current_session_context_class</literal> ��
- <literal>"thread"</literal> �Ƃ���Ƃ悢�ł��傤�B
+ を選択するべきです。
+ 第2の用例としては、
+ <literal>hibernate.current_session_context_class</literal> を
+ <literal>"thread"</literal> とするとよいでしょう。
</para>
</sect2>
<sect2 id="transactions-demarcation-jta" revision="3">
- <title>JTA��g�p����</title>
+ <title>JTAを使用する</title>
<para>
- �i�����w��A�v���P�[�V�����T�[�o�[�i�Ⴆ�AEJB�Z�b�V����Bean�̔w��j�Ŏ��s����ꍇ�A
- Hibernate����擾���邷�ׂẴf�[�^�\�[�X�R�l�N�V�����́A
- �����I�ɃO���[�o��JTA�g�����U�N�V�����̈ꕔ�ɂȂ�܂��B
+ 永続化層をアプリケーションサーバー(例えば、EJBセッションBeanの背後)で実行する場合、
+ Hibernateから取得するすべてのデータソースコネクションは、
+ 自動的にグローバルJTAトランザクションの一部になります。
- EJB��g�킸�ɁA�X�^���h�A������JTA���������邱�Ƃ�ł��܂��B
- JTA�����̂��߂ɁAHibernate�͂Q�̐헪����܂��B
+ EJBを使わずに、スタンドアロンのJTA実装を導入することもできます。
+ JTA統合のために、Hibernateは2つの戦略を提供します。
</para>
<para>
- Bean�Ǘ��g�����U�N�V�����iBMT�j��g���A<literal>Transaction</literal> API��g���ꍇ�A
- Hibernate�̓A�v���P�[�V�����T�[�o�[��BMT�g�����U�N�V�����̊J�n�ƏI�������܂��B
- ���Ȃ킿�A�g�����U�N�V�����Ǘ��̃R�[�h�́A�Ǘ�����Ȃ����Ɠ����ɂȂ�܂��B
+ Bean管理トランザクション(BMT)を使い、<literal>Transaction</literal> APIを使う場合、
+ HibernateはアプリケーションサーバーにBMTトランザクションの開始と終わりを告げます。
+ すなわち、トランザクション管理のコードは、管理されない環境と同じになります。
</para>
<programlisting><![CDATA[// BMT idiom
@@ -616,9 +618,9 @@
}]]></programlisting>
<para>
- �g�����U�N�V�������E�Ƃ��� <literal>Session</literal> ��g�������ꍇ�A
- �ȒP�ɃR���e�L�X�g��`�d����@�\�ł��� <literal>getCurrentSession()</literal> ������̂ŁA
- JTA�� <literal>UserTransaction</literal> API�ڎg�p���ׂ��ł��傤�B
+ トランザクション境界として <literal>Session</literal> を使いたい場合、
+ 簡単にコンテキストを伝播する機能である <literal>getCurrentSession()</literal> があるので、
+ JTAの <literal>UserTransaction</literal> APIを直接使用すべきでしょう。
</para>
<programlisting><![CDATA[// BMT idiom with getCurrentSession()
@@ -640,9 +642,9 @@
}]]></programlisting>
<para>
- CMT�ł́A�g�����U�N�V�������E��Z�b�V����Bean�̃f�v���C�����g�f�B�X�N���v�^�Œ�`���A
- �v���O�����ł͍s���܂���B
- �䂦�ɁA�R�[�h�͎��̂悤�ɏ��Ȃ��Ȃ�܂��B
+ CMTでは、トランザクション境界をセッションBeanのデプロイメントディスクリプタで定義し、
+ プログラムでは行いません。
+ ゆえに、コードは次のように少なくなります。
</para>
<programlisting><![CDATA[// CMT idiom
@@ -653,121 +655,121 @@
]]></programlisting>
<para>
- CMT/EJB�̒��ł́A��Ƀ��[���o�b�N�������I�Ɏ��{����܂��B
- �Ȃ��Ȃ�A�Z�b�V�����r�[���̃��\�b�h�ɂ�蓊����ꂽ���䂳��Ă��Ȃ�
- <literal>RuntimeException</literal> �́A�O���[�o���g�����U�N�V������
- ���[���o�b�N����悤�ɃR���e�i�ɓ`���邽�߂ł��B
- <emphasis>����́ABMT�������CMT�Ƃ��������Hibernate <literal>Transaction</literal>
- API��g���K�v�͏�����Ȃ��Ƃ����Ӗ��ł��B</emphasis>
+ CMT/EJBの中では、常にロールバックが自動的に実施されます。
+ なぜなら、セッションビーンのメソッドにより投げられた制御されていない
+ <literal>RuntimeException</literal> は、グローバルトランザクションを
+ ロールバックするようにコンテナに伝えるためです。
+ <emphasis>これは、BMTもしくはCMTといっしょにHibernate <literal>Transaction</literal>
+ APIを使う必要は少しもないという意味です。</emphasis>
</para>
<para>
- Hibernate�̃g�����U�N�V�����t�@�N�g����ݒ肷��ۂɁA
- JTA�ڎg���iBMT�́j�ꍇ�� <literal>org.hibernate.transaction.JTATransactionFactory</literal> ��A
- CMT�Z�b�V�����r�[���̒��ł� <literal>org.hibernate.transaction.CMTTransactionFactory</literal> ��
- �I���ׂ����Ƃ������Ƃɒ��ӂ��Ă��������B
+ Hibernateのトランザクションファクトリを設定する際に、
+ JTAを直接使う(BMTの)場合は <literal>org.hibernate.transaction.JTATransactionFactory</literal> を、
+ CMTセッションビーンの中では <literal>org.hibernate.transaction.CMTTransactionFactory</literal> を
+ 選択すべきだということに注意してください。
<literal>hibernate.transaction.manager_lookup_class</literal>
- ��Z�b�g���邱�Ƃ�v���o���Ă��������B
- �Ȃ��A<literal>hibernate.current_session_context_class</literal> �́A
- �Z�b�g���Ȃ����i����݊��j�A<literal>"jta"</literal> ��Z�b�g���Ă��������B
+ をセットすることも思い出してください。
+ なお、<literal>hibernate.current_session_context_class</literal> は、
+ セットしないか(後方互換)、<literal>"jta"</literal> をセットしてください。
</para>
<para>
- <literal>getCurrentSession()</literal> �I�y���[�V�����́AJTA���ł͂P�̌��_�����܂��B
+ <literal>getCurrentSession()</literal> オペレーションは、JTA環境では1つの欠点を持ちます。
- �f�t�H���g�Ŏg���� <literal>after_statement</literal> �R�l�N�V���������[�X���[�h��g�p�����ŁA
- �x�����P����܂��B
+ デフォルトで使われる <literal>after_statement</literal> コネクションリリースモードを使用する上で、
+ 警告が1つあります。
- JTA�d�l�̋��Ȑ���̂��߂ɁA
- <literal>scroll()</literal> �܂��� <literal>iterate()</literal> ���Ԃ����A
- �����Ă��Ȃ� <literal>ScrollableResults</literal> �܂��� <literal>Iterator</literal>
- �C���X�^���X��Hibernate�������I�ɃN���[���A�b�v���邱�Ƃ͂ł��܂���B
+ JTA仕様の愚かな制約のために、
+ <literal>scroll()</literal> または <literal>iterate()</literal> が返した、
+ 閉じられていない <literal>ScrollableResults</literal> または <literal>Iterator</literal>
+ インスタンスをHibernateが自動的にクリーンアップすることはできません。
- <literal>finally</literal> �u���b�N�̒��ŁA
- <literal>ScrollableResults.close()</literal> �܂���
- <literal>Hibernate.close(Iterator)</literal> ���I�ɌĂяo���āA
- ���ɐ��f�[�^�x�[�X�J�[�\������ <emphasis>���Ȃ���Ȃ�܂���</emphasis>�B
+ <literal>finally</literal> ブロックの中で、
+ <literal>ScrollableResults.close()</literal> または
+ <literal>Hibernate.close(Iterator)</literal> を明示的に呼び出して、
+ 裏に潜んだデータベースカーソルを解放 <emphasis>しなければなりません</emphasis>。
- �i������A�����̃A�v���P�[�V�����ł́AJTA��CMT�R�[�h�� <literal>scroll()</literal>
- �� <literal>iterate()</literal> �̎g�p�����̂͗e�Ղł��B�j
+ (もちろん、多くのアプリケーションでは、JTAかCMTコードで <literal>scroll()</literal>
+ や <literal>iterate()</literal> の使用を避けるのは容易です。)
</para>
</sect2>
<sect2 id="transactions-demarcation-exceptions">
- <title>��O�n���h�����O</title>
+ <title>例外ハンドリング</title>
<para>
- <literal>Session</literal> ����O�i<literal>SQLException</literal>��܂ށj�𓊂����ꍇ�A
- �����ɁA�f�[�^�x�[�X�g�����U�N�V�������[���o�b�N���A<literal>Session.close()</literal>
- ��ĂсA<literal>Session</literal> �C���X�^���X��j�����ׂ��ł��B
- <literal>Session</literal> �̂������̃��\�b�h�́A
- �Z�b�V�����̏�Ԃ� <emphasis>���������܂�</emphasis> �ɂ��܂��B
- Hibernate����������O��A�ł����̂Ƃ��Ĉ������Ƃ͂ł��܂���B
- <literal>finally</literal> �u���b�N�̒��� <literal>close()</literal> ��Ă�ŁA
- <literal>Session</literal> ��m���ɕ��Ă��������B
+ <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> を確実に閉じてください。
</para>
<para>
- <literal>HibernateException</literal> �́AHibernate�i�����w�̒��Ŕ������鑽���̃G���[��
- ���b�v����A��������Ȃ���O�ł��iHibernate�̌Â��o�[�W�����͈Ⴂ�܂����j�B
- �������̈ӌ��́A�A�v���P�[�V�����J���҂ɉs�\�ȗ�O��
- ���w�ŃL���b�`���邱�Ƃ��v���ׂ��ł͂Ȃ��Ƃ������Ƃł��B
- �����̃V�X�e���ł́A��������Ȃ���O�ƒv���I�ȗ�O�́A
- �R�[���X�^�b�N�̍ŏ��̃t���[���̂P�i�Ⴆ�A�ŏ�ʂ̑w�Łj�Ńn���h�����O���A
- �G���[���b�Z�[�W��A�v���P�[�V�������[�U�[�ɕ\�����܂�
- �i������́A���̓K�ȏ�������{���܂��j�B
- Hibernate�́A<literal>HibernateException</literal> �ȊO�̌�������Ȃ���O��
- �����邱�Ƃɒ��ӂ��Ă��������B
- ������܂��A�s�\�ł���A�K�ȏ�������{���ׂ��ł��B
+ <literal>HibernateException</literal> は、Hibernate永続化層の中で発生する多くのエラーを
+ ラップする、検査されない例外です(Hibernateの古いバージョンは違いました)。
+ 私たちの意見は、アプリケーション開発者に回復不可能な例外を
+ 下層でキャッチすることを強要すべきではないということです。
+ 多くのシステムでは、検査されない例外と致命的な例外は、
+ コールスタックの最初のフレームの1つ(例えば、最上位の層で)でハンドリングし、
+ エラーメッセージをアプリケーションユーザーに表示します
+ (もしくは、他の適切な処理を実施します)。
+ Hibernateは、<literal>HibernateException</literal> 以外の検査されない例外も
+ 投げることに注意してください。
+ これらもまた、回復不可能であり、適切な処理を実施すべきです。
</para>
<para>
- Hibernate�́A�f�[�^�x�[�X�Ƃ̑Θb���ɓ�����ꂽ <literal>SQLException</literal> ��
- <literal>JDBCException</literal> �Ń��b�v���܂��B
- ���́A��O����Ӗ��̂��� <literal>JDBCException</literal> �̃T�u�N���X��
- �ϊ����悤�Ǝ��݂܂��B
- ���� <literal>SQLException</literal> �́A<literal>JDBCException.getCause()</literal>
- �ɂ�肢�ł�����܂��B
- Hibernate�́A<literal>SessionFactory</literal> �ɒlj�����Ă���
- <literal>SQLExceptionConverter</literal> ��g���A<literal>SQLException</literal> ��
- �K���� <literal>JDBCException</literal> �T�u�N���X�ɕϊ����܂��B
- �f�t�H���g�ł́A<literal>SQLExceptionConverter</literal> �͐ݒ肳��Ă���SQL�����ɂ��
- ��`����܂��B
- ����ŁA�Ǝ��̎����ɍ����ւ��邱�Ƃ�ł��܂�
- �i�ڍׂ́A<literal>SQLExceptionConverterFactory</literal> �N���X��Javadoc��Q�Ƃ��Ă��������j�B
- �W���I�� <literal>JDBCException</literal> �̃T�u�^�C�v���L�Ɏ����܂��B
+ 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> のサブタイプを下記に示します。
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
<literal>JDBCConnectionException</literal> -
- ��b�ƂȂ�JDBC�ʐM�̃G���[��\���܂��B
+ 基礎となるJDBC通信のエラーを表します。
</para>
</listitem>
<listitem>
<para>
<literal>SQLGrammarException</literal> -
- ���s����SQL�̕��@������͍\���̖���\���܂��B
+ 発行するSQLの文法もしくは構文の問題を表します。
</para>
</listitem>
<listitem>
<para>
<literal>ConstraintViolationException</literal> -
- ���炩�̌`���̊��S������ᔽ��\���܂��B
+ 何らかの形式の完全性制約違反を表します。
</para>
</listitem>
<listitem>
<para>
<literal>LockAcquisitionException</literal> -
- �v�����ꂽ�������{����̂ɕK�v�ȃ��b�N���x����ۂ̃G���[��\���܂��B
+ 要求された操作を実施するのに必要なロックレベルを得る際のエラーを表します。
</para>
</listitem>
<listitem>
<para>
<literal>GenericJDBCException</literal> -
- ���̃J�e�S���Ɉ�v���Ȃ�������ʓI�ȗ�O�ł��B
+ 他のカテゴリに一致しなかった一般的な例外です。
</para>
</listitem>
</itemizedlist>
@@ -775,22 +777,22 @@
</sect2>
<sect2 id="transactions-demarcation-timeout">
- <title>�g�����U�N�V�����̃^�C���A�E�g</title>
+ <title>トランザクションのタイムアウト</title>
<para>
- EJB�̂悤�ȊǗ����ꂽ�������邫��߂ďd�v�ȓ����̂P�́A
- �g�����U�N�V�����̃^�C���A�E�g�ł��B
- ����͊Ǘ�����Ă��Ȃ��R�[�h�ɂ͒ł��܂���B
- �g�����U�N�V�����^�C���A�E�g�́A�s�i�s�ȃg�����U�N�V������
- ���[�U�[�Ƀ��X�|���X��Ԃ��Ȃ��܂܁A�������Ƀ��\�[�X��g�������Ȃ�
- ���Ƃ�ۏႵ�܂��B
- �Ǘ����ꂽ���iJTA�j�̊O�ł́AHibernate�͂��̋@�\��t���ɒł��܂���B
- �������Ȃ���AHibernate�͎��̂悤�ȃf�[�^�A�N�Z�X����̐��䂭�炢�͂ł��܂��B
- �f�[�^�x�[�X���x���̃f�b�h���b�N��傫�ȃ��U���g�Z�b�g��Ԃ��N�G����
- ��`���ꂽ�^�C���A�E�g�ɂ���Ċm���ɐ������܂��B
- �Ǘ����ꂽ���ł́AHibernate�̓g�����U�N�V�����^�C���A�E�g��JTA�ɈϏ����܂��B
- ���̋@�\�́AHibernate�� <literal>Transaction</literal> �I�u�W�F�N�g��
- ����Ē��ۉ�����Ă��܂��B
+ EJBのような管理された環境が提供するきわめて重要な特徴の1つは、
+ トランザクションのタイムアウトです。
+ これは管理されていないコードには提供できません。
+ トランザクションタイムアウトは、不品行なトランザクションが
+ ユーザーにレスポンスを返さないまま、無期限にリソースを使い続けない
+ ことを保障します。
+ 管理された環境(JTA)の外では、Hibernateはこの機能をフルに提供できません。
+ しかしながら、Hibernateは次のようなデータアクセス操作の制御くらいはできます。
+ データベースレベルのデッドロックや大きなリザルトセットを返すクエリを
+ 定義されたタイムアウトによって確実に制限します。
+ 管理された環境では、HibernateはトランザクションタイムアウトをJTAに委譲します。
+ この機能は、Hibernateの <literal>Transaction</literal> オブジェクトに
+ よって抽象化されています。
</para>
<programlisting><![CDATA[
@@ -814,9 +816,9 @@
}]]></programlisting>
<para>
- CMT�r�[���̒��ł� <literal>setTimeout()</literal> ��
- �Ăяo���Ȃ����Ƃɒ��ӂ��Ă��������B
- �g�����U�N�V�����^�C���A�E�g�͐錾�I�ɒ�`�����ׂ��ł��B
+ CMTビーンの中では <literal>setTimeout()</literal> を
+ 呼び出せないことに注意してください。
+ トランザクションタイムアウトは宣言的に定義されるべきです。
</para>
</sect2>
@@ -824,32 +826,32 @@
</sect1>
<sect1 id="transactions-optimistic">
- <title>�y�ϓI�������s����</title>
+ <title>楽観的同時実行制御</title>
<para>
- �������ƍ����X�P�[���r���e�B�̗������������A�v���[�`�́A
- �o�[�W���j���O��g�����y�ϓI�������s����݂̂ł��B
- �X�V�̏Փ˂����邽�߂Ɂi����сA�X�V��������̂�h�����߂Ɂj�A
- �o�[�W�����ԍ�������̓^�C���X�^���v��g���āA�o�[�W������`�F�b�N���܂��B
- Hibernate�́A�y�ϓI�������s��s���A�v���P�[�V�����R�[�h�������߂�
- �A�v���[�`��R���܂��B
- �������������郆�[�X�P�[�X�́A�����Θb�����܂����A
- �o�[�W�����`�F�b�N�͂܂��P�̃f�[�^�x�[�X�g�����U�N�V�����̒��ōX�V�������Ƃ�h��
- ���_������Ă��܂��B
+ 高い並列性と高いスケーラビリティの両方を実現するアプローチは、
+ バージョニングを使った楽観的同時実行制御のみです。
+ 更新の衝突を見つけるために(および、更新が失われるのを防ぐために)、
+ バージョン番号もしくはタイムスタンプを使って、バージョンをチェックします。
+ Hibernateは、楽観的同時実行を行うアプリケーションコードを書くための
+ アプローチを3つ提供します。
+ 私たちが見せるユースケースは、長い対話を持ちますが、
+ バージョンチェックはまだ1つのデータベーストランザクションの中で更新を失うことを防ぐ
+ 利点も持っています。
</para>
<sect2 id="transactions-optimistic-manual">
- <title>�A�v���P�[�V�����ɂ��o�[�W�����`�F�b�N</title>
+ <title>アプリケーションによるバージョンチェック</title>
<para>
- Hibernate�ɂقƂ�Ǐ����Ă��킸�Ɏ�������P�[�X�ł��B
- �f�[�^�x�[�X�Ƃ̂����́A���ꂼ��V���� <literal>Session</literal> �̒��ŋN����܂��B
- �J���҂́A���ׂẲi�����C���X�^���X�𑀍삷��O�ɁA
- �f�[�^�x�[�X����ēǂݍ��݂���Ӗ�������܂��B
- ���̃A�v���[�`�ł́A�Θb�g�����U�N�V�����̕������邽�߂ɁA
- �A�v���P�[�V�������g���o�[�W�����`�F�b�N��s���K�v������܂��B
- ���̃A�v���[�`�́A�f�[�^�x�[�X�A�N�Z�X�̒��ł́A�ł������ł��B
- �G���e�B�e�BEJB�ƍł���Ă���A�v���[�`�ł��B
+ Hibernateにほとんど助けてもらわずに実装するケースです。
+ データベースとのやり取りは、それぞれ新しい <literal>Session</literal> の中で起こります。
+ 開発者は、すべての永続性インスタンスを操作する前に、
+ データベースから再読み込みする責務があります。
+ このアプローチでは、対話トランザクションの分離を守るために、
+ アプリケーション自身がバージョンチェックを行う必要があります。
+ このアプローチは、データベースアクセスの中では、最も非効率です。
+ エンティティEJBと最も似ているアプローチです。
</para>
<programlisting><![CDATA[// foo is an instance loaded by a previous Session
@@ -865,54 +867,54 @@
session.close();]]></programlisting>
<para>
- <literal><version></literal> ��g���āA<literal>version</literal>
- �v���p�e�B��}�b�s���O���܂��B
- Hibernate�́A�G���e�B�e�B���_�[�e�B�ł���ꍇ�A�t���b�V�����A
- ���̊Ԃ� <literal>version</literal> �v���p�e�B�����I�ɃC���N�������g���܂��B
+ <literal><version></literal> を使って、<literal>version</literal>
+ プロパティをマッピングします。
+ Hibernateは、エンティティがダーティである場合、フラッシュし、
+ その間に <literal>version</literal> プロパティを自動的にインクリメントします。
</para>
<para>
- ������A�f�[�^�̕����Ⴂ���ʼn^�p���Ă���A�o�[�W�����`�F�b�N���s�v�Ȃ�A
- ���̃A�v���[�`��g���A�o�[�W�����`�F�b�N��X�L�b�v���邾���ł��B
- ���̏ꍇ�́A�����Θb�ɂ́A
- <emphasis>�u�Ō�ɃR�~�b�g������̂����v</emphasis> ���f�t�H���g�̐헪�ł��傤�B
- ���̃A�v���[�`�́A�A�v���P�[�V�����̃��[�U�[���������邩�����Ȃ����Ƃ�
- �S�ɗ��߂Ēu���Ă��������B����́A�G���[���b�Z�[�W�⋣�������ύX��}�[�W����@�
- �Ȃ��܂܁A�X�V�����o�����邽�߂ł��B
+ もちろん、データの並列性が低い環境で運用しており、バージョンチェックが不要なら、
+ このアプローチを使い、バージョンチェックをスキップするだけです。
+ その場合は、長い対話には、
+ <emphasis>「最後にコミットしたものが勝つ」</emphasis> がデフォルトの戦略でしょう。
+ このアプローチは、アプリケーションのユーザーを混乱させるかもしれないことを
+ 心に留めて置いてください。それは、エラーメッセージや競合した変更をマージする機会が
+ ないまま、更新を失う経験をするためです。
</para>
<para>
- �m���ɁA�}�j���A���ɂ��o�[�W�����`�F�b�N�́A���ׂȋV�������Ŏ��s�ł��܂����A
- �����̃A�v���P�[�V�����ɂƂ��Ď��p�I�ł͂���܂���B
- �����A�P�̃C���X�^���X�����łȂ��A
- �C�����ꂽ�I�u�W�F�N�g�̊��S�ȃO���t��`�F�b�N���Ȃ���Ȃ�܂���B
- Hibernate�́A�v�p���_�C���Ƃ��āA�g�� <literal>Session</literal> ��
- �������ꂽ�C���X�^���X�����I�Ƀo�[�W�����`�F�b�N���܂��B
+ 確かに、マニュアルによるバージョンチェックは、些細な儀式だけで実行できますが、
+ 多くのアプリケーションにとって実用的ではありません。
+ しばしば、1つのインスタンスだけでなく、
+ 修正されたオブジェクトの完全なグラフをチェックしなければなりません。
+ Hibernateは、設計パラダイムとして、拡張 <literal>Session</literal> か
+ 分離されたインスタンスを自動的にバージョンチェックします。
</para>
</sect2>
<sect2 id="transactions-optimistic-longsession">
- <title>�g���Z�b�V�����Ǝ����o�[�W���j���O</title>
+ <title>拡張セッションと自動バージョニング</title>
<para>
- �P�� <literal>Session</literal> �C���X�^���X�Ƃ��̉i�����C���X�^���X�́A
- <emphasis>session-per-conversation</emphasis> �Ƃ��Ēm����A
- �Θb�S�̂Ŏg���܂��B
- Hibernate�̓t���b�V������ۂɁA�C���X�^���X�̃o�[�W������`�F�b�N���܂��B
- �����ɏC�����ꂽ���Ƃ��o����ƁA��O�𓊂��܂��B
- ���̗�O��L���b�`���Ĉ����̂́A�J���҂̐ӔC�ł�
- �i��ʓI�ȑI���́A�ύX��}�[�W���邩�Â��Ȃ��f�[�^�Ńr�W�l�X�Θb��
- �ăX�^�[�g����@����[�U�[�ɒ��邱�Ƃł��j�B
+ 1つの <literal>Session</literal> インスタンスとその永続性インスタンスは、
+ <emphasis>session-per-conversation</emphasis> として知られる、
+ 対話全体で使われます。
+ Hibernateはフラッシュする際に、インスタンスのバージョンをチェックします。
+ 同時に修正されたことを検出すると、例外を投げます。
+ この例外をキャッチして扱うのは、開発者の責任です
+ (一般的な選択肢は、変更をマージするか古くないデータでビジネス対話を
+ 再スタートする機会をユーザーに提供することです)。
</para>
<para>
- ���[�U�[�̑Θb��҂��Ă���Ƃ��́A
- <literal>Session</literal> ���b�ƂȂ�JDBC�R�l�N�V��������藣���܂��B
- ���̃A�v���[�`�́A�f�[�^�x�[�X�A�N�Z�X�̒��ł́A�ł�����I�ł��B
- �A�v���P�[�V�����́A�o�[�W�����`�F�b�N�╪�����ꂽ�C���X�^���X��Ēlj����邱��
- �ɊS���K�v�͂���܂���B�܂��A������f�[�^�x�[�X�g�����U�N�V�����̒���
- �C���X�^���X��ēǂݍ��݂���K�v�͂���܂���B
+ ユーザーの対話を待っているときは、
+ <literal>Session</literal> を基礎となるJDBCコネクションから切り離します。
+ このアプローチは、データベースアクセスの中では、最も効率的です。
+ アプリケーションは、バージョンチェックや分離されたインスタンスを再追加すること
+ に関心を持つ必要はありません。また、あらゆるデータベーストランザクションの中で
+ インスタンスを再読み込みする必要はありません。
</para>
<programlisting><![CDATA[// foo is an instance loaded earlier by the old session
@@ -925,74 +927,74 @@
session.close(); // Only for last transaction in conversation]]></programlisting>
<para>
- <literal>foo</literal> �I�u�W�F�N�g�́A�������[�h���� <literal>Session</literal>
- ��܂��m���Ă��܂��B
- �Â��Z�b�V�����̏�ŐV�����f�[�^�x�[�X�g�����U�N�V������J�n���邱�ƂŁA
- �V�����R�l�N�V������擾���A���̃Z�b�V�������ĊJ����܂��B
- �f�[�^�x�[�X�g�����U�N�V������R�~�b�g���邱�ƂŁA
- �Z�b�V��������JDBC�R�l�N�V������ؒf���A�R�l�N�V������v�[���ɕԂ��܂��B
- �Đڑ�������A�X�V���Ă��Ȃ��f�[�^�̃o�[�W�����`�F�b�N�������邽�߂ɁA
- ���̃g�����U�N�V�����ɂ��X�V����Ă��邩�����Ȃ��I�u�W�F�N�g�Ɋւ��āA
- <literal>LockMode.READ</literal> ����� <literal>Session.lock()</literal>
- ��Ăяo�����Ƃ��ł��܂��B
- �X�V���� <emphasis>����</emphasis> �f�[�^���b�N����K�v�͂���܂���B
+ <literal>foo</literal> オブジェクトは、自分をロードした <literal>Session</literal>
+ をまだ知っています。
+ 古いセッションの上で新しいデータベーストランザクションを開始することで、
+ 新しいコネクションを取得し、そのセッションが再開されます。
+ データベーストランザクションをコミットすることで、
+ セッションからJDBCコネクションを切断し、コネクションをプールに返します。
+ 再接続した後、更新していないデータのバージョンチェックを強制するために、
+ 他のトランザクションにより更新されているかもしれないオブジェクトに関して、
+ <literal>LockMode.READ</literal> をつけて <literal>Session.lock()</literal>
+ を呼び出すことができます。
+ 更新して <emphasis>いる</emphasis> データをロックする必要はありません。
- �ʏ�A�g�� <literal>Session</literal> �� <literal>FlushMode.MANUAL</literal>
- ��Z�b�g���܂��B
- �Ō�̃f�[�^�x�[�X�g�����U�N�V�����̎����ł̂݁A
- �Θb�̒��ŕύX���ꂽ���ׂĂ���ۂɉi���������邽�߂ł��B
- �䂦�ɁA�Ō�̃f�[�^�x�[�X�g�����U�N�V�����̂� <literal>flush()</literal>
- �I�y���[�V������܂݂܂��B�����āA�Θb��I��点�邽�߂ɁA
- �Z�b�V������ <literal>close()</literal> ���܂��B
+ 通常、拡張 <literal>Session</literal> に <literal>FlushMode.MANUAL</literal>
+ をセットします。
+ 最後のデータベーストランザクションの周期でのみ、
+ 対話の中で変更されたすべてを実際に永続化させるためです。
+ ゆえに、最後のデータベーストランザクションのみ <literal>flush()</literal>
+ オペレーションを含みます。そして、対話を終わらせるために、
+ セッションも <literal>close()</literal> します。
</para>
<para>
- ���[�U�[���l�����ɁA�i�[���邱�Ƃ��ł��Ȃ����炢 <literal>Session</literal>
- ���傫���̂ł���A���̃p�^�[���͖�肪����܂��B
- �Ⴆ�A<literal>HttpSession</literal> �͉\�Ȍ��菬�����ۂׂ��ł��B
- <literal>Session</literal> �́i�����I�Ɂj�P���L���b�V���ł����A
- ���[�h�����I�u�W�F�N�g���ׂĕێ����܂��B
- �����炭�A���N�G�X�g�^���X�|���X�̃T�C�N��������ł���A���̐헪���g���܂��B
+ ユーザーが考慮中に、格納することができないくらい <literal>Session</literal>
+ が大きいのであれば、このパターンは問題があります。
+ 例えば、<literal>HttpSession</literal> は可能な限り小さく保つべきです。
+ <literal>Session</literal> は(強制的に)1次キャッシュでもあり、
+ ロードしたオブジェクトをすべて保持します。
+ おそらく、リクエスト/レスポンスのサイクルが数回であれば、この戦略が使えます。
- �P�̑Θb�̂��߂����� <literal>Session</literal> ��g���ׂ��ł��B
- �Ȃ��Ȃ�A�����ɐV�N�łȂ��f�[�^�����߂ł��B
+ 1つの対話のためだけに <literal>Session</literal> を使うべきです。
+ なぜなら、すぐに新鮮でないデータを持つためです。
</para>
<para>
- �iHibernate�̈ȑO�̃o�[�W�����́A�����I�� <literal>Session</literal> ��
- �ؒf�ƍĐڑ����K�v���������Ƃɒ��ӂ��Ă��������B
- �����̃��\�b�h�͔��ɂȂ�܂����B
- �Ȃ��Ȃ�A�g�����U�N�V�����̊J�n�ƏI���͓������ʂ����邽�߂ł��B�j
+ (Hibernateの以前のバージョンは、明示的な <literal>Session</literal> の
+ 切断と再接続が必要だったことに注意してください。
+ これらのメソッドは非推奨になりました。
+ なぜなら、トランザクションの開始と終了は同じ効果があるためです。)
</para>
<para>
- �ؒf���� <literal>Session</literal> ��i�����w�̋߂��ŕێ����ׂ��ł��邱�Ƃ�
- ���ӂ��Ă��������B
- ����������ƁA�R�w���̒��� <literal>Session</literal> ��ێ����邽�߂ɁA
- EJB�X�e�[�g�t���Z�b�V����Bean��g�����������B
- <literal>HttpSession</literal> �Ɋi�[���邽�߂ɁAWeb�w�ɓ]�����Ȃ��ł�������
- �i�ʂ̑w�ւ̃V���A���C�Y����Ȃ��ł��������j�B
+ 切断した <literal>Session</literal> を永続化層の近くで保持すべきであることに
+ 注意してください。
+ 言い換えると、3層環境の中で <literal>Session</literal> を保持するために、
+ EJBステートフルセッションBeanを使ってください。
+ <literal>HttpSession</literal> に格納するために、Web層に転送しないでください
+ (別の層へのシリアライズもしないでください)。
</para>
<para>
- �g���Z�b�V�����p�^�[���i������́A<emphasis>session-per-conversation</emphasis>�j�́A
- �����I�ȃJ�����g�Z�b�V�����R���e�L�X�g�Ǘ�����{���������B
- ���̂��߂ɁA���Ȃ��� <literal>CurrentSessionContext</literal> �̎�����������K�v������܂��B
- Hibernate Wiki�ɂ�����Q�Ƃ��Ă��������B
+ 拡張セッションパターン(もしくは、<emphasis>session-per-conversation</emphasis>)は、
+ 自動的なカレントセッションコンテキスト管理を実施するより難しい。
+ このために、あなたは <literal>CurrentSessionContext</literal> の実装を供給する必要があります。
+ Hibernate Wikiにある例を参照してください。
</para>
</sect2>
<sect2 id="transactions-optimistic-detached">
- <title>�f�^�b�`���ꂽ�I�u�W�F�N�g�Ǝ����o�[�W���j���O</title>
+ <title>デタッチされたオブジェクトと自動バージョニング</title>
<para>
- �V���� <literal>Session</literal>�ɂ��A�i�����X�g�A�i�F�c�a�j�Ƃ̑Θb���������܂��B
- �܂�����A�����i�����C���X�^���X���A�f�[�^�x�[�X�Ƃ̑Θb���Ƃɍė��p����܂��B
- �A�v���P�[�V�����́A���X�͑��� <literal>Session</literal> �Ń��[�h����A
- �f�^�b�`���ꂽ�C���X�^���X�̏�Ԃ𑀍삵�܂��B
- �����āA<literal>Session.update()</literal> ������́A<literal>Session.saveOrUpdate()</literal>�A
- <literal>Session.merge()</literal> ��g���āA�����̃C���X�^���X��Ēlj����܂��B
+ 新しい <literal>Session</literal>により、永続化ストア(訳注:DB)との対話が発生します。
+ また一方、同じ永続性インスタンスが、データベースとの対話ごとに再利用されます。
+ アプリケーションは、元々は他の <literal>Session</literal> でロードされ、
+ デタッチされたインスタンスの状態を操作します。
+ そして、<literal>Session.update()</literal> もしくは、<literal>Session.saveOrUpdate()</literal>、
+ <literal>Session.merge()</literal> を使って、それらのインスタンスを再追加します。
</para>
<programlisting><![CDATA[// foo is an instance loaded by a previous Session
@@ -1004,66 +1006,66 @@
session.close();]]></programlisting>
<para>
- ���̏ꍇ���͂�AHibernate�̓t���b�V������ۂɁA�C���X�^���X�̃o�[�W������`�F�b�N���܂��B
- �X�V�̋��������������ꍇ�ɂ́A��O�𓊂��܂��B
+ この場合もやはり、Hibernateはフラッシュする際に、インスタンスのバージョンをチェックします。
+ 更新の競合が発生した場合には、例外を投げます。
</para>
<para>
- �I�u�W�F�N�g���C������Ă��Ȃ����Ƃ�m�M���Ă���ꍇ�́A
- <literal>update()</literal> �̑���ɁA<literal>LockMode.READ</literal> ��g���āA
- <literal>lock()</literal> ��Ăяo�����Ƃ�ł��܂�
- �i���ׂẴL���b�V����I�A�o�[�W�����`�F�b�N����{���܂��j�B
+ オブジェクトが修正されていないことを確信している場合は、
+ <literal>update()</literal> の代わりに、<literal>LockMode.READ</literal> を使って、
+ <literal>lock()</literal> を呼び出すこともできます
+ (すべてのキャッシュを迂回し、バージョンチェックを実施します)。
</para>
</sect2>
<sect2 id="transactions-optimistic-customizing">
- <title>�����o�[�W���j���O�̃J�X�^�}�C�Y</title>
+ <title>自動バージョニングのカスタマイズ</title>
<para>
- �}�b�s���O�� <literal>optimistic-lock</literal> ������ <literal>false</literal>
- ��ݒ肷�邱�Ƃɂ��A����̃v���p�e�B��R���N�V�����̂��߂�
- �����o�[�W�����C���N�������g���ɂł��܂��B
- �v���p�e�B���_�[�e�B�ł����Ă�A�o�[�W������C���N�������g���܂���B
+ マッピングの <literal>optimistic-lock</literal> 属性に <literal>false</literal>
+ を設定することにより、特定のプロパティやコレクションのために
+ 自動バージョンインクリメントを無効にできます。
+ プロパティがダーティであっても、バージョンをインクリメントしません。
</para>
<para>
- ���K�V�[�̃f�[�^�x�[�X�X�L�[�}�́A�����ΌŒ�I�ł���A�ύX�ł��܂���B
- �܂��́A���̃A�v���P�[�V�����������f�[�^�x�[�X�ɃA�N�Z�X���Ȃ���Ȃ炸�A
- ���̃A�v���P�[�V�����̓o�[�W�����ԍ���^�C���X�^���v�������삷����@��m��܂���B
- �ǂ���̏ꍇ��A�e�[�u���̓���̃J�����Ăɂ��āA�o�[�W���j���O��s���܂���B
- �o�[�W������^�C���X�^���v�̃v���p�e�B��}�b�s���O�����ɁA�o�[�W�����`�F�b�N�����邽�߂ɁA
- <literal><class></literal> �}�b�s���O�� <literal>optimistic-lock="all"</literal> ��
- �w�肵�Ă��������B
- �s�̂��ׂẴt�B�[���h�̏�Ԃ��r����悤�ɂȂ�܂��B
- ����́AHibernate���Â���ԂƐV������Ԃ��r�ł���ꍇ�ɁA
- ���_�I�ɓ��삷�邾���ł��邱�Ƃɒ��ӂ��Ă��������B
- �Ⴆ�Asession-per-request-with-detached-objects �ł͂Ȃ��A
- �P�̒��� <literal>Session</literal> ��g���ꍇ�ł��B
+ レガシーのデータベーススキーマは、しばしば固定的であり、変更できません。
+ または、他のアプリケーションが同じデータベースにアクセスしなければならず、
+ そのアプリケーションはバージョン番号やタイムスタンプさえ操作する方法を知りません。
+ どちらの場合も、テーブルの特定のカラムを当てにして、バージョニングを行えません。
+ バージョンやタイムスタンプのプロパティをマッピングせずに、バージョンチェックさせるために、
+ <literal><class></literal> マッピングに <literal>optimistic-lock="all"</literal> を
+ 指定してください。
+ 行のすべてのフィールドの状態を比較するようになります。
+ これは、Hibernateが古い状態と新しい状態を比較できる場合に、
+ 理論的に動作するだけであることに注意してください。
+ 例えば、session-per-request-with-detached-objects ではなく、
+ 1つの長い <literal>Session</literal> を使う場合です。
</para>
<para>
- �Ƃ��ǂ��A�s��ꂽ�ύX���d�Ȃ�Ȃ�����A�����ɍs��ꂽ�ύX�����邱�Ƃ��ł��܂��B
- <literal><class></literal> �}�b�s���O�� <literal>optimistic-lock="dirty"</literal>
- ��ݒ肵���ꍇ�A�t���b�V������ۂɁAHibernate�̓_�[�e�B�t�B�[���h�݂̂��r���܂��B
+ ときどき、行われた変更が重ならない限り、同時に行われた変更を受け入れることができます。
+ <literal><class></literal> マッピングに <literal>optimistic-lock="dirty"</literal>
+ を設定した場合、フラッシュする際に、Hibernateはダーティフィールドのみを比較します。
</para>
<para>
- ��p�̃o�[�W�����^�^�C���X�^���v�̃J������g���ꍇ�A
- ������͂��ׂā^�_�[�e�B�̃t�B�[���h���r����ꍇ�ǂ���ł����Ă�A
- Hibernate�̓G���e�B�e�B���Ƃ�1�� <literal>UPDATE</literal> ����
- �i�K�� <literal>WHERE</literal> �߂Ƌ��Ɂj�g���A
- �o�[�W�����`�F�b�N�Ə��̍X�V��s���܂��B
- �֘A����G���e�B�e�B�̍Ēlj���J�X�P�[�h���邽�߂ɁA
- �A���I�ȉi������g�p�����ꍇ�A�s�K�v�ȍX�V����s���邩�����܂���B
- ����͒ʏ���ɂȂ�܂���B
- �������A���������C���X�^���X��ύX���Ă��Ȃ��Ƃ�A
- �f�[�^�x�[�X�� <emphasis>on update</emphasis> �g���K�[�����s����邩�����܂���B
- <literal><class></literal> �}�b�s���O��
- <literal>select-before-update="true"</literal> ��ݒ肷�邱�Ƃɂ���āA
- ���̐U�镑����J�X�^�}�C�Y�ł��܂��B
- �m���ɕύX���ꂽ����m�F���邽�߂ɁA�s��X�V����O�ɁA
- �K���C���X�^���X�� <literal>SELECT</literal> ���܂��B
+ 専用のバージョン/タイムスタンプのカラムを使う場合、
+ もしくはすべて/ダーティのフィールドを比較する場合どちらであっても、
+ Hibernateはエンティティごとに1つの <literal>UPDATE</literal> 文を
+ (適切な <literal>WHERE</literal> 節と共に)使い、
+ バージョンチェックと情報の更新を行います。
+ 関連するエンティティの再追加をカスケードするために、
+ 連鎖的な永続化を使用した場合、不必要な更新を実行するかもしれません。
+ これは通常問題になりません。
+ しかし、分離したインスタンスを変更していなくとも、
+ データベースの <emphasis>on update</emphasis> トリガーが実行されるかもしれません。
+ <literal><class></literal> マッピングに
+ <literal>select-before-update="true"</literal> を設定することによって、
+ この振る舞いをカスタマイズできます。
+ 確実に変更されたかを確認するために、行を更新する前に、
+ 必ずインスタンスを <literal>SELECT</literal> します。
</para>
</sect2>
@@ -1071,202 +1073,202 @@
</sect1>
<sect1 id="transactions-locking">
- <title>�ߊϓI���b�N</title>
+ <title>悲観的ロック</title>
<para>
- ���[�U�����b�N�헪�ɔY�ނ̂ɑ����̎��Ԃ��₷���Ƃ�Ӑ}���Ă��܂���B
- �ʏ�́AJDBC�R�l�N�V�����ɕ������x����w�肵�A
- �P�Ƀf�[�^�x�[�X�ɂ��ׂĂ̎d��������Ώ\���ł��B
- �������Ȃ���A���x�ȃ��[�U�́A�r���I�ȔߊϓI���b�N��l�����邱�Ƃ��A
- �V�����g�����U�N�V�������J�n�����ۂɃ��b�N��Ċl�����邱�Ƃ�
- �Ƃ��ǂ��]�ނ������܂���B
+ ユーザがロック戦略に悩むのに多くの時間を費やすことを意図していません。
+ 通常は、JDBCコネクションに分離レベルを指定し、
+ 単にデータベースにすべての仕事をさせれば十分です。
+ しかしながら、高度なユーザは、排他的な悲観的ロックを獲得することか、
+ 新しいトランザクションが開始される際にロックを再獲得することを
+ ときどき望むかもしれません。
</para>
<para>
- Hibernate�͂���f�[�^�x�[�X�̃��b�N�̎d�g�݂�g���܂��B
- ��������̃I�u�W�F�N�g�����ă��b�N���܂���I
+ Hibernateはいつもデータベースのロックの仕組みを使います。
+ メモリ内のオブジェクトを決してロックしません!
</para>
<para>
- <literal>LockMode</literal> �N���X�́AHibernate���l���ł���قȂ郍�b�N���x�����`���܂��B
- �ȉ��̎d�g�݂ɂ��A���b�N��l���ł��܂��B
+ <literal>LockMode</literal> クラスは、Hibernateが獲得できる異なるロックレベルを定義します。
+ 以下の仕組みにより、ロックを獲得できます。
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- <literal>LockMode.WRITE</literal> �́A
- Hibernate���s��X�V������͑}������ۂɎ����I�ɓ����܂��B
+ <literal>LockMode.WRITE</literal> は、
+ Hibernateが行を更新もしくは挿入する際に自動的に得られます。
</para>
</listitem>
<listitem>
<para>
- <literal>LockMode.UPGRADE</literal> �́A
- �f�[�^�x�[�X�ŃT�|�[�g����Ă��镶�@ <literal>SELECT ... FOR UPDATE</literal>
- ��g�����A�����I�ȃ��[�U�[�v���ɂ�蓾���邩�����܂���B
+ <literal>LockMode.UPGRADE</literal> は、
+ データベースでサポートされている文法 <literal>SELECT ... FOR UPDATE</literal>
+ を使った、明示的なユーザー要求により得られるかもしれません。
</para>
</listitem>
<listitem>
<para>
- <literal>LockMode.UPGRADE_NOWAIT</literal> �́A
- Oracle �� <literal>SELECT ... FOR UPDATE NOWAIT</literal> ��g�����A
- �����I�ȃ��[�U�[�v���ɂ�蓾���邩�����܂���B
+ <literal>LockMode.UPGRADE_NOWAIT</literal> は、
+ Oracle で <literal>SELECT ... FOR UPDATE NOWAIT</literal> を使った、
+ 明示的なユーザー要求により得られるかもしれません。
</para>
</listitem>
<listitem>
<para>
- <literal>LockMode.READ</literal> �́A
- Repeatable Read�������Serializable�̕������x���ŁA�f�[�^��ǂۂɎ����I�ɓ����܂��B
- �����炭�A�����I�ȃ��[�U�[�v���ɂ��A�Ď擾����܂��B
+ <literal>LockMode.READ</literal> は、
+ Repeatable ReadもしくはSerializableの分離レベルで、データを読んだ際に自動的に得られます。
+ おそらく、明示的なユーザー要求により、再取得されます。
</para>
</listitem>
<listitem>
<para>
- <literal>LockMode.NONE</literal> �́A���b�N���Ȃ����Ƃ�\���܂��B
- <literal>Transaction</literal> �̏I���ɁA
- ���ׂẴI�u�W�F�N�g�͂��̃��b�N���[�h�ɐ�ւ��܂��B
- <literal>update()</literal> �� <literal>saveOrUpdate()</literal> ��Ăяo�����Ƃɂ���āA
- �Z�b�V�����Ɋ֘A�t����ꂽ�I�u�W�F�N�g��A���̃��b�N���[�h�ŏo�����܂��B
+ <literal>LockMode.NONE</literal> は、ロックしないことを表します。
+ <literal>Transaction</literal> の終わりに、
+ すべてのオブジェクトはこのロックモードに切り替わります。
+ <literal>update()</literal> や <literal>saveOrUpdate()</literal> を呼び出すことによって、
+ セッションに関連付けられたオブジェクトも、このロックモードで出発します。
</para>
</listitem>
</itemizedlist>
<para>
- �u�����I�ȃ��[�U�[�v���v�Ƃ́A���L�̕��@�̂P�Ō����\���܂��B
+ 「明示的なユーザー要求」とは、下記の方法の1つで言い表せます。
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- <literal>LockMode</literal> ��w�肵�� <literal>Session.load()</literal> �̌Ăяo���B
+ <literal>LockMode</literal> を指定した <literal>Session.load()</literal> の呼び出し。
</para>
</listitem>
<listitem>
<para>
- <literal>Session.lock()</literal> �̌Ăяo���B
+ <literal>Session.lock()</literal> の呼び出し。
</para>
</listitem>
<listitem>
<para>
- <literal>Query.setLockMode()</literal> �̌Ăяo���B
+ <literal>Query.setLockMode()</literal> の呼び出し。
</para>
</listitem>
</itemizedlist>
<para>
- <literal>UPGRADE</literal> ������� <literal>UPGRADE_NOWAIT</literal> ���w�肳�ꂽ
- <literal>Session.load()</literal> ���Ăяo����A
- ���v�����ꂽ�I�u�W�F�N�g���Z�b�V�����ɂ���Ă܂����[�h����Ă��Ȃ������ꍇ�́A
- <literal>SELECT ... FOR UPDATE</literal> ��g���āA�I�u�W�F�N�g�����[�h����܂��B
- <literal>load()</literal> �ŌĂяo���ꂽ�I�u�W�F�N�g���A
- �v������Ă����萧�������Ȃ����b�N�ł��łɃ��[�h����Ă����ꍇ�́A
- Hibernate�͂��̃I�u�W�F�N�g�̂��߂ɁA<literal>lock()</literal> ��Ăяo���܂��B
+ <literal>UPGRADE</literal> もしくは <literal>UPGRADE_NOWAIT</literal> が指定された
+ <literal>Session.load()</literal> が呼び出され、
+ かつ要求されたオブジェクトがセッションによってまだロードされていなかった場合は、
+ <literal>SELECT ... FOR UPDATE</literal> を使って、オブジェクトがロードされます。
+ <literal>load()</literal> で呼び出されたオブジェクトが、
+ 要求されているより制限が少ないロックですでにロードされていた場合は、
+ Hibernateはそのオブジェクトのために、<literal>lock()</literal> を呼び出します。
</para>
<para>
- �w�肳�ꂽ���b�N���[�h�� <literal>READ</literal> ������́A<literal>UPGRADE</literal>�A
- <literal>UPGRADE_NOWAIT</literal> �������ꍇ�A<literal>Session.lock()</literal>
- �́A�o�[�W�����ԍ��̃`�F�b�N����{���܂��B
- �i<literal>UPGRADE</literal> ������� <literal>UPGRADE_NOWAIT</literal> �̏ꍇ�A
- <literal>SELECT ... FOR UPDATE</literal> ���g���܂��B�j
+ 指定されたロックモードが <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> が使われます。)
</para>
<para>
- �f�[�^�x�[�X���v�����ꂽ���b�N���[�h��T�|�[�g���Ă��Ȃ��ꍇ�A
- Hibernate�́i��O�𓊂������ɁA�j�K�ȑ���̃��[�h��g���܂��B
- ����́A�A�v���P�[�V�������|�[�^�u���ł��邱�Ƃ�ۏ��܂��B
+ データベースが要求されたロックモードをサポートしていない場合、
+ Hibernateは(例外を投げる代わりに、)適切な代わりのモードを使います。
+ これは、アプリケーションがポータブルであることを保証します。
</para>
</sect1>
<sect1 id="transactions-connection-release">
- <title>�R�l�N�V�����J�����[�h</title>
+ <title>コネクション開放モード</title>
<para>
- Hibernate�̃��K�V�[�i2.x�j��JDBC�R�l�N�V�����Ǘ��Ɋւ���U�镑���́A
- �ŏ��ɕK�v�Ƃ����ۂ� <literal>Session</literal> ���R�l�N�V������Ƃ�����̂ł����B
- �����āA�Z�b�V������������܂ŁA���̃R�l�N�V������ێ����܂����B
- Hibernate 3.x�́A�Z�b�V������JDBC�R�l�N�V������ǂ̂悤�ɐ��䂷�邩��`����
- �R�l�N�V�����J�����[�h�Ƃ����T�O�����܂����B
- �ȍ~�̋c�_�́A�\�����ꂽ <literal>ConnectionProvider</literal> ��ʂ��Ē����
- �R�l�N�V�����ɓK�ł��邱�Ƃɒ��ӂ��Ă��������B
- �قȂ�J�����[�h�́A<literal>org.hibernate.ConnectionReleaseMode</literal> ��
- ���ꂽ�l�ɂ��m�F����܂��B
+ Hibernateのレガシー(2.x)のJDBCコネクション管理に関する振る舞いは、
+ 最初に必要とした際に <literal>Session</literal> がコネクションを得るというものでした。
+ そして、セッションが閉じられるまで、そのコネクションを保持しました。
+ Hibernate 3.xは、セッションにJDBCコネクションをどのように制御するかを伝える
+ コネクション開放モードという概念を導入しました。
+ 以降の議論は、構成された <literal>ConnectionProvider</literal> を通して提供される
+ コネクションに適切であることに注意してください。
+ 異なる開放モードは、<literal>org.hibernate.ConnectionReleaseMode</literal> に
+ 列挙された値により確認されます。
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- <literal>ON_CLOSE</literal> - �{���I�ɏ�L�ŏq�ׂ����K�V�[�̐U�镑���ł��B
- Hibernate�Z�b�V�����͍ŏ���JDBC�A�N�Z�X����s����K�v������ۂɃR�l�N�V�����܂��B
- �����āA�Z�b�V������������܂ŁA�R�l�N�V������ێ����܂��B
+ <literal>ON_CLOSE</literal> - 本質的に上記で述べたレガシーの振る舞いです。
+ Hibernateセッションは最初にJDBCアクセスを実行する必要がある際にコネクションを得ます。
+ そして、セッションが閉じられるまで、コネクションを保持します。
</para>
</listitem>
<listitem>
<para>
<literal>AFTER_TRANSACTION</literal> -
- <literal>org.hibernate.Transaction</literal> ������������A
- �R�l�N�V������J�����܂��B
+ <literal>org.hibernate.Transaction</literal> が完了した後、
+ コネクションを開放します。
</para>
</listitem>
<listitem>
<para>
- <literal>AFTER_STATEMENT</literal> �i�ϋɓI�ȊJ���Ƃ�Ă��j -
- ���ׂẴX�e�[�g�����g�����ꂼ����s���ꂽ��A�R�l�N�V�������J������܂��B
- �X�e�[�g�����g���Z�b�V�����Ɋ֘A���郊�\�[�X��J�����܂܂ɂ���ꍇ�́A
- ���̐ϋɓI�ȊJ���̓X�L�b�v����܂��B
- ���̂Ƃ���A���ꂪ�N����̂� <literal>org.hibernate.ScrollableResults</literal>
- ���g����ꍇ�݂̂ł��B
+ <literal>AFTER_STATEMENT</literal> (積極的な開放とも呼ばれる) -
+ すべてのステートメントがそれぞれ実行された後、コネクションが開放されます。
+ ステートメントがセッションに関連するリソースを開いたままにする場合は、
+ この積極的な開放はスキップされます。
+ 今のところ、これが起こるのは <literal>org.hibernate.ScrollableResults</literal>
+ が使われる場合のみです。
</para>
</listitem>
</itemizedlist>
<para>
- �R���t�B�O���[�V�����p�����[�^�� <literal>hibernate.connection.release_mode</literal>
- �́A�g�p����J�����[�h��w�肷�邽�߂Ɏg���܂��B
- �w��ł���l�͎��̒ʂ�ł��B
+ コンフィグレーションパラメータの <literal>hibernate.connection.release_mode</literal>
+ は、使用する開放モードを指定するために使います。
+ 指定できる値は次の通りです。
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- <literal>auto</literal> �i�f�t�H���g�j - �����I�����
+ <literal>auto</literal> (デフォルト) - これを選択すると
<literal>org.hibernate.transaction.TransactionFactory.getDefaultReleaseMode()</literal>
- ���\�b�h�ɂ���ĕԂ����J�����[�h�ɈϏ�����܂��B
- ���̃��\�b�h�́A
- JTATransactionFactory�ɂ�ConnectionReleaseMode.AFTER_STATEMENT��Ԃ��A
- JDBCTransactionFactory�ɂ�ConnectionReleaseMode.AFTER_TRANSACTION��Ԃ��܂��B
- ���̃f�t�H���g�̐U�镑����ς��Ă��܂�����������������܂���B
- ����́A���̐ݒ�l�������ŋN�����Q�́A
- ���[�U�R�[�h�̒��Ńo�O��Ԉ�������ɂȂ�₷������ł��B
+ メソッドによって返される開放モードに委譲されます。
+ このメソッドは、
+ JTATransactionFactoryにはConnectionReleaseMode.AFTER_STATEMENTを返し、
+ JDBCTransactionFactoryにはConnectionReleaseMode.AFTER_TRANSACTIONを返します。
+ このデフォルトの振る舞いを変えてうまくいった試しがありません。
+ それは、この設定値が原因で起こる障害は、
+ ユーザコードの中でバグや間違った条件になりやすいからです。
</para>
</listitem>
<listitem>
<para>
- <literal>on_close</literal> - ConnectionReleaseMode.ON_CLOSE��g���܂��B
- ���̐ݒ�͌���݊��̂��߂Ɏc����Ă��܂����A�g��Ȃ����Ƃ������߂܂��B
+ <literal>on_close</literal> - ConnectionReleaseMode.ON_CLOSEを使います。
+ この設定は後方互換のために残されていますが、使わないことを強く勧めます。
</para>
</listitem>
<listitem>
<para>
- <literal>after_transaction</literal> - ConnectionReleaseMode.AFTER_TRANSACTION��g���܂��B
- ���̐ݒ��JTA���̒��ł͎g���ׂ��ł͂���܂���B
- ConnectionReleaseMode.AFTER_TRANSACTION��w�肵�A�����R�~�b�g���[�h�̒��ł́A
- �J�����[�h��AFTER_STATEMENT�ł��邩�̂悤�ɁA�R�l�N�V�����͊J������邱�Ƃɒ��ӂ��Ă��������B
+ <literal>after_transaction</literal> - ConnectionReleaseMode.AFTER_TRANSACTIONを使います。
+ この設定はJTA環境の中では使うべきではありません。
+ ConnectionReleaseMode.AFTER_TRANSACTIONを指定し、自動コミットモードの中では、
+ 開放モードがAFTER_STATEMENTであるかのように、コネクションは開放されることに注意してください。
</para>
</listitem>
<listitem>
<para>
- <literal>after_statement</literal> - ConnectionReleaseMode.AFTER_STATEMENT��g���܂��B
- ����ɁA�ݒ肳�ꂽ <literal>ConnectionProvider</literal> �́A
- ���̐ݒ� (<literal>supportsAggressiveRelease()</literal>) ��T�|�[�g���邩�ǂ���
- �ׂ邽�߂Ɏg�p���܂��B
- ��������łȂ��ꍇ�A�J�����[�h��ConnectionReleaseMode.AFTER_TRANSACTION
- �Ƀ��Z�b�g����܂��B
- ���̐ݒ�͎��̊��ł݈̂��S�ł��B
- ����́A<literal>ConnectionProvider.getConnection()</literal> ��Ăяo�����т�
- ��ՂƂȂ�JDBC�R�l�N�V������������̂�擾�ł��邩�A
- �����R�l�N�V�����������邱�Ƃ����ƂȂ�Ȃ������R�~�b�g���̒��ł��B
+ <literal>after_statement</literal> - ConnectionReleaseMode.AFTER_STATEMENTを使います。
+ さらに、設定された <literal>ConnectionProvider</literal> は、
+ この設定 (<literal>supportsAggressiveRelease()</literal>) をサポートするかどうか
+ を調べるために使用します。
+ もしそうでない場合、開放モードはConnectionReleaseMode.AFTER_TRANSACTION
+ にリセットされます。
+ この設定は次の環境でのみ安全です。
+ それは、<literal>ConnectionProvider.getConnection()</literal> を呼び出すたびに
+ 基盤となるJDBCコネクションが同じものを取得できるか、
+ 同じコネクションが得られることが問題とならない自動コミット環境の中です。
</para>
</listitem>
</itemizedlist>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/tutorial.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/tutorial.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/tutorial.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,53 +1,55 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="tutorial">
- <title>Hibernate�̓���</title>
+ <title>Hibernateの導入</title>
<sect1 id="tutorial-intro" revision="1">
- <title>�O����</title>
+ <title>前書き</title>
<para>
- ���̏͂�Hibernate���߂Ďg�����[�U�����̓���I�ȃ`���[�g���A���ł��B
- �C���������f�[�^�x�[�X��g���ȒP�ȃR�}���h���C���A�v���P�[�V��������n�߁A
- �����킩��₷�������ŊJ����i�߂܂��B
+ この章はHibernateを初めて使うユーザ向けの入門的なチュートリアルです。
+ インメモリデータベースを使う簡単なコマンドラインアプリケーションから始め、
+ 一歩一歩わかりやすいやり方で開発を進めます。
</para>
<para>
- ���̃`���[�g���A����Hibernate���߂Ďg�����[�U��z�肵�Ă��܂����A
- ������ɂ�Java��SQL�ɂ��Ă̒m�����K�v�ł��B
- �����Michael Gloegl�̎�ɂ��`���[�g���A�����~���ɂ��Ă��܂����A
- �����ŃT�[�h�p�[�e�B���C�u�����ƌ����Ă���̂́AJDK 1.4��5.0�p�̂�̂ł��B
- JDK 1.3�𗘗p����̂ł���Α��̃��C�u�������K�v�������܂���B
+ このチュートリアルはHibernateを初めて使うユーザを想定していますが、
+ 理解するにはJavaとSQLについての知識が必要です。
+ これはMichael Gloeglの手によるチュートリアルを下敷きにしていますが、
+ ここでサードパーティライブラリと言っているのは、JDK 1.4と5.0用のものです。
+ JDK 1.3を利用するのであれば他のライブラリが必要かもしれません。
</para>
<para>
- �`���[�g���A���̃\�[�X�R�[�h��Hibernate�f�B�X�g���r���[�V������
- <literal>doc/reference/tutorial/</literal> �ɂ���܂��B
+ チュートリアルのソースコードはHibernateディストリビューションの
+ <literal>doc/reference/tutorial/</literal> にあります。
</para>
</sect1>
<sect1 id="tutorial-firstapp" revision="2">
- <title>�p�[�g1 - ���߂Ă�Hibernate�A�v���P�[�V����</title>
+ <title>パート1 - 初めてのHibernateアプリケーション</title>
<para>
- �ŏ��ɃR���\�[���x�[�X�̊ȒP��Hibernate�A�v���P�[�V������쐬���܂��B
- Java�f�[�^�x�[�X�iHSQL DB�j�𗘗p����̂ŁA
- �f�[�^�x�[�X�T�[�o��C���X�g�[������K�v�͂���܂���B
+ 最初にコンソールベースの簡単なHibernateアプリケーションを作成します。
+ Javaデータベース(HSQL DB)を利用するので、
+ データベースサーバをインストールする必要はありません。
</para>
<para>
- ���ɏ����ȃf�[�^�x�[�X�A�v���P�[�V�������K�v���Ƃ��܂��傤�B
- ���̃A�v���P�[�V�����ɂ͏o�Ȃ������C�x���g�ƁA
- ���̃C�x���g�̃z�X�g�ɂ��Ă̏���i�[�����̂Ƃ��܂��B
+ 仮に小さなデータベースアプリケーションが必要だとしましょう。
+ そのアプリケーションには出席したいイベントと、
+ そのイベントのホストについての情報を格納するものとします。
</para>
<para>
- �܂��ŏ��ɂ��邱�Ƃ͊J���p�̃f�B���N�g����Z�b�g�A�b�v���āA
- �K�v�ƂȂ邷�ׂĂ�Java���C�u������z�u���邱�Ƃł��B
- Hibernate�E�F�u�T�C�g����Hibernate�f�B�X�g���r���[�V������_�E�����[�h�����������B
- �t�@�C����𓀂��� <literal>/lib</literal> �ɂ���K�v�ȃ��C�u�����̂��ׂĂ�A
- �V�����J���p�f�B���N�g���� <literal>/lib</literal> �f�B���N�g���ɔz�u���Ă��������B
- ���̂悤�ɂȂ��Ă���͂��ł��F
+ まず最初にすることは開発用のディレクトリをセットアップして、
+ 必要となるすべてのJavaライブラリを配置することです。
+ HibernateウェブサイトからHibernateディストリビューションをダウンロードしてください。
+ ファイルを解凍して <literal>/lib</literal> にある必要なライブラリのすべてを、
+ 新しい開発用ディレクトリの <literal>/lib</literal> ディレクトリに配置してください。
+ このようになっているはずです:
</para>
<programlisting><![CDATA[.
@@ -64,24 +66,24 @@
log4j.jar ]]></programlisting>
<para>
- ���ꂪ <emphasis>�{�h�L�������g���M���_�ł�</emphasis> Hibernate�̕K�v�Œ���̃��C�u�����ł�
- �i���C���A�[�J�C�u��hibernate3.jar��R�s�[���Ă��邱�Ƃɒ��ӂ��Ă��������j�B
- Hibernate�̃o�[�W�����ɂ���Ă͂���ɕK�v�ȃ��C�u������A�s�v�ȃ��C�u���������邩�����܂���B
- Hibernate�f�B�X�g���r���[�V������ <literal>lib/</literal> �f�B���N�g���ɂ���
- <literal>README.txt</literal> �t�@�C�������������B
- �K�{�܂��̓I�v�V�����̃T�[�h�p�[�e�B���C�u�����ɂ��Ă̏���ڂ��Ă��܂�
- �i����Log4j�͕K�{�ł͂���܂��A�����̊J���҂��D��ł��܂��j�B
+ これが <emphasis>本ドキュメント執筆時点での</emphasis> Hibernateの必要最低限のライブラリです
+ (メインアーカイブのhibernate3.jarもコピーしていることに注意してください)。
+ Hibernateのバージョンによってはさらに必要なライブラリや、不要なライブラリがあるかもしれません。
+ Hibernateディストリビューションの <literal>lib/</literal> ディレクトリにある
+ <literal>README.txt</literal> ファイルを見てください。
+ 必須またはオプションのサードパーティライブラリについての情報を載せています
+ (実際Log4jは必須ではありませんが、多くの開発者が好んでいます)。
</para>
<para>
- ���Ƀf�[�^�x�[�X�Ɋi�[����C�x���g��\���N���X��쐬���܂��B
+ 次にデータベースに格納するイベントを表すクラスを作成します。
</para>
<sect2 id="tutorial-firstapp-firstclass" revision="1">
- <title>�ŏ��̃N���X</title>
+ <title>最初のクラス</title>
<para>
- �ŏ��̉i���N���X�́A�v���p�e�B���������V���v����JavaBean�ł��F
+ 最初の永続クラスは、プロパティをいくつか持つシンプルなJavaBeanです:
</para>
<programlisting><![CDATA[package events;
@@ -122,42 +124,42 @@
}]]></programlisting>
<para>
- �����̂Ƃ���A���̃N���X�̓t�B�[���h��private�̉��������Ă���̂Ɠ����ɁA
- JavaBean�W���̃Q�b�^�[�A�Z�b�^�[���\�b�h�̖����K��ɏ]���Ă��܂��B
- ���̂悤�Ȑv�͐�������Ă��܂����K�{�ł͂���܂���B
- �A�N�Z�T���\�b�h��݂���̂̓��t�@�N�^�����O��l�����挒���̂��߂ŁA
- Hibernate�̓t�B�[���h�ɒ��ڃA�N�Z�X���邱�Ƃ�\�ł��B
- �����̂Ȃ��R���X�g���N�^�́A���t���N�V�����ł��̃N���X�̃C���X�^���X��쐬���邽�߂�
- �K�v�ł��B
+ ご覧のとおり、このクラスはフィールドがprivateの可視性を持っているのと同時に、
+ JavaBean標準のゲッター、セッターメソッドの命名規約に従っています。
+ このような設計は推奨されていますが必須ではありません。
+ アクセサメソッドを設けるのはリファクタリングを考えた頑健性のためで、
+ Hibernateはフィールドに直接アクセスすることも可能です。
+ 引数のないコンストラクタは、リフレクションでこのクラスのインスタンスを作成するために
+ 必要です。
</para>
<para>
- <literal>id</literal> �v���p�e�B�́A�������̃C�x���g�ɑ��郆�j�[�N�Ȏ��ʎq�̒l��ێ����܂��B
- Hibernate�̊��S�ȋ@�\��g��������A���ׂẲi���G���e�B�e�B�N���X
- �i����قǏd�v�ł͂Ȃ��ˑ��N���X�Ƃ�����̂����܂��j
- �ɂ��̂悤�Ȏ��ʎq�v���p�e�B���K�v�ɂȂ�܂��B
- ������قƂ�ǂ̃A�v���P�[�V�����i����web�A�v���P�[�V�����j�ł́A
- ���ʎq�ŃI�u�W�F�N�g���ʂ���K�v�����邽�߁A����͐����Ƃ�����������ł���ƍl����ׂ��ł��B
- �������ʏ�I�u�W�F�N�g��ID�𑀍삷��悤�Ȃ��Ƃ͂��܂���B
- ���̂��߃Z�b�^�[���\�b�h��private�ɂ���ׂ��ł��B
- Hibernate�������I�u�W�F�N�g���Z�[�u���ꂽ�Ƃ��Ɏ��ʎq�֒l�������܂��B
- Hibernate���ipublic, private, protected�j�t�B�[���h�ɒ��ڃA�N�Z�X�ł���̂Ɠ��l�ɁA
- public, private, protected�̃A�N�Z�T���\�b�h�ɃA�N�Z�X�ł���Ƃ������Ƃ��킩��ł��傤�B
- �I��͂��Ȃ��ɔC����Ă���̂ŁA���Ȃ��̃A�v���P�[�V�����̐v�ɍ��킹�邱�Ƃ��ł��܂��B
+ <literal>id</literal> プロパティは、ある特定のイベントに対するユニークな識別子の値を保持します。
+ Hibernateの完全な機能を使いたければ、すべての永続エンティティクラス
+ (それほど重要ではない依存クラスというものもあります)
+ にこのような識別子プロパティが必要になります。
+ 事実上ほとんどのアプリケーション(特にwebアプリケーション)では、
+ 識別子でオブジェクトを区別する必要があるため、これは制限というよりも特徴であると考えるべきです。
+ しかし通常オブジェクトのIDを操作するようなことはしません。
+ そのためセッターメソッドはprivateにするべきです。
+ Hibernateだけがオブジェクトがセーブされたときに識別子へ値を代入します。
+ Hibernateが(public, private, protected)フィールドに直接アクセスできるのと同様に、
+ public, private, protectedのアクセサメソッドにアクセスできるということがわかるでしょう。
+ 選択はあなたに任されているので、あなたのアプリケーションの設計に合わせることができます。
</para>
<para>
- �����̂Ȃ��R���X�g���N�^�͂��ׂẲi���N���X�ɕK�{�ł��B
- �����Hibernate��Java�̃��t���N�V������g���āA�I�u�W�F�N�g��쐬���Ȃ���Ȃ�Ȃ����߂ł��B
- �R���X�g���N�^��private�ɂ��邱�Ƃ͉\�ł����A
- ���s���̃v���L�V�����ƁA�o�C�g�R�[�h����Ȃ��̌����I�ȃf�[�^�̒��o�ɂ́A
- package�������K�v�ł��B
+ 引数のないコンストラクタはすべての永続クラスに必須です。
+ これはHibernateがJavaのリフレクションを使って、オブジェクトを作成しなければならないためです。
+ コンストラクタをprivateにすることは可能ですが、
+ 実行時のプロキシ生成と、バイトコード操作なしの効率的なデータの抽出には、
+ package可視性が必要です。
</para>
<para>
- �J���t�H���_�� <literal>src</literal> �Ƃ����f�B���N�g���̓K�ȃp�b�P�[�W�ɁA
- ����Java�\�[�X�t�@�C����z�u�����������B
- ���̎��_�Ńf�B���N�g���͈ȉ��̂悤�ɂȂ��Ă���͂��ł��F
+ 開発フォルダの <literal>src</literal> というディレクトリの適切なパッケージに、
+ このJavaソースファイルを配置してください。
+ この時点でディレクトリは以下のようになっているはずです:
</para>
<programlisting><![CDATA[.
@@ -168,23 +170,23 @@
Event.java]]></programlisting>
<para>
- ���̃X�e�b�v�ł́AHibernate�ɂ��̉i���N���X�̏������܂��B
+ 次のステップでは、Hibernateにこの永続クラスの情報を教えます。
</para>
</sect2>
<sect2 id="tutorial-firstapp-mapping" revision="1">
- <title>�}�b�s���O�t�@�C��</title>
+ <title>マッピングファイル</title>
<para>
- Hibernate�́A�ǂ̂悤�ɉi���N���X�̃I�u�W�F�N�g���[�h���i�[����悢����m��K�v������܂��B
- ������Hibernate�}�b�s���O�t�@�C�����o�ꂵ�܂��B
- �}�b�s���O�t�@�C���́A�f�[�^�x�[�X��̂ǂ̃e�[�u���ɃA�N�Z�X���Ȃ���Ȃ�Ȃ����A
- ���̃e�[�u���̂ǂ̃J������g���ׂ�����AHibernate�ɋ����܂��B
+ Hibernateは、どのように永続クラスのオブジェクトをロードし格納すればよいかを知る必要があります。
+ ここでHibernateマッピングファイルが登場します。
+ マッピングファイルは、データベース内のどのテーブルにアクセスしなければならないか、
+ そのテーブルのどのカラムを使うべきかを、Hibernateに教えます。
</para>
<para>
- �}�b�s���O�t�@�C���̊�{�I�ȍ\���͂��̂悤�ɂȂ�܂��F
+ マッピングファイルの基本的な構造はこのようになります:
</para>
<programlisting><![CDATA[<?xml version="1.0"?>
@@ -197,28 +199,28 @@
</hibernate-mapping>]]></programlisting>
<para>
- Hibernate DTD�����ɐ������Ă��邱�Ƃɒ��ڂ��Ă��������B
- ����DTD�́A�G�f�B�^��IDE�ł�XML�}�b�s���O�v�f�Ƒ����̃I�[�g�R���v���[�V�����@�\�ɗ��p�ł��܂��B
- �܂�DTD�t�@�C����e�L�X�g�G�f�B�^�ŊJ���Ă݂Ă��������B
- �Ƃ����̂�A���ׂĂ̗v�f�Ƒ�����T�ς��A
- �R�����g��f�t�H���g�̒l����ɂ͈�ԊȒP�ȕ��@������ł��B
- Hibernate�́Aweb����DTD�t�@�C�����[�h�����ɁA
- �܂��A�v���P�[�V�����̃N���X�p�X���炱���T���o�����Ƃ��邱�Ƃɒ��ӂ��Ă��������B
- DTD�t�@�C����Hibernate�f�B�X�g���r���[�V������ <literal>src/</literal>
- �f�B���N�g���Ɠ��l�A<literal>hibernate3.jar</literal> �ɂ�܂܂�Ă��܂��B
+ Hibernate DTDが非常に洗練されていることに注目してください。
+ このDTDは、エディタやIDEでのXMLマッピング要素と属性のオートコンプリーション機能に利用できます。
+ またDTDファイルをテキストエディタで開けてみてください。
+ というのも、すべての要素と属性を概観し、
+ コメントやデフォルトの値を見るには一番簡単な方法だからです。
+ Hibernateは、webからDTDファイルをロードせずに、
+ まずアプリケーションのクラスパスからこれを探し出そうとすることに注意してください。
+ DTDファイルはHibernateディストリビューションの <literal>src/</literal>
+ ディレクトリと同様、<literal>hibernate3.jar</literal> にも含まれています。
</para>
<para>
- �ȍ~�̗�ł̓R�[�h��Z�����邽�߂�DTD�錾��ȗ����܂��B
- ���R�ł�������̓I�v�V�����ł͂���܂���B
+ 以降の例ではコードを短くするためにDTD宣言を省略します。
+ 当然ですがこれはオプションではありません。
</para>
<para>
- 2�� <literal>hibernate-mapping</literal> �^�O�̊Ԃ�
- <literal>class</literal> �v�f��܂߂Ă��������B
- ���ׂẲi���G���e�B�e�B�N���X�i�O�����܂����A
- �t�@�[�X�g�N���X�̃G���e�B�e�B�ł͂Ȃ��ˑ��N���X�Ƃ�����̂���قǓo�ꂵ�܂��j
- ��SQL�f�[�^�x�[�X��̃e�[�u���ւ̂��̂悤�ȃ}�b�s���O��K�v�Ƃ��܂��B
+ 2つの <literal>hibernate-mapping</literal> タグの間に
+ <literal>class</literal> 要素を含めてください。
+ すべての永続エンティティクラス(念を押しますが、
+ ファーストクラスのエンティティではない依存クラスというものが後ほど登場します)
+ はSQLデータベース内のテーブルへのこのようなマッピングを必要とします。
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -230,12 +232,12 @@
</hibernate-mapping>]]></programlisting>
<para>
- ����܂Ŏ������́A<literal>Event</literal> �N���X�̃I�u�W�F�N�g��
- <literal>EVENTS</literal> �e�[�u���ɑ��āA�ǂ̂悤�ɉi���������胍�[�h�����肷��̂���
- Hibernate�ɋ����Ă��܂����B�����ČX�̃C���X�^���X�̓e�[�u���̍s�Ƃ��ĕ\������܂��B
- ����ł͈��������e�[�u���̎�L�[�ɑ��郆�j�[�N�Ȏ��ʎq�v���p�e�B��}�b�s���O���Ă����܂��B
- ����ɁA���̎��ʎq�̈����ɋC��g�������Ȃ������̂Ɠ��l�ɁA
- �㗝�̎�L�[�J�����ɑ���Hibernate�̎��ʎq�����헪��ݒ肵�܂��B
+ これまで私たちは、<literal>Event</literal> クラスのオブジェクトを
+ <literal>EVENTS</literal> テーブルに対して、どのように永続化したりロードしたりするのかを
+ Hibernateに教えてきました。そして個々のインスタンスはテーブルの行として表現されます。
+ それでは引き続きテーブルの主キーに対するユニークな識別子プロパティをマッピングしていきます。
+ さらに、この識別子の扱いに気を使いたくなかったのと同様に、
+ 代理の主キーカラムに対するHibernateの識別子生成戦略を設定します。
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -249,21 +251,21 @@
</hibernate-mapping>]]></programlisting>
<para>
- <literal>id</literal> �v�f�͎��ʎq�v���p�e�B�̐錾�ł���A
- <literal>name="id"</literal> ��Java�v���p�e�B�̖��O��錾���܂��B
- Hibernate�͂��̃v���p�e�B�փA�N�Z�X���邽�߂ɃQ�b�^�[�A�Z�b�^�[���\�b�h��g���܂��B
- �J���������ł� <literal>EVENTS</literal> �e�[�u���̂ǂ̃J�������L�[�Ƃ��Ďg���̂���
- Hibernate�ɋ����܂��B
- ����q�ɂȂ��Ă��� <literal>generator</literal> �v�f�́A���ʎq�����鎞�̐헪��w�肵�܂��B
- �i���̗�ł� <literal>native</literal> ��p���܂����j�B
- ���̗v�f�́A�ݒ肵���f�[�^�x�[�X�idialect�j�ɑ���ŗǂȎ��ʎq�����헪��I�肷���̂ł��B
- Hibernate�́A�A�v���P�[�V�����Œl���蓖�Ă�헪�i������͓Ǝ��Ɋg�������헪�j�Ɠ��l�ɁA
- �O���[�o���Ƀ��j�[�N�Ȓl��f�[�^�x�[�X�ɐ���������헪��T�|�[�g���Ă��܂��B
+ <literal>id</literal> 要素は識別子プロパティの宣言であり、
+ <literal>name="id"</literal> でJavaプロパティの名前を宣言します。
+ Hibernateはこのプロパティへアクセスするためにゲッター、セッターメソッドを使います。
+ カラム属性では <literal>EVENTS</literal> テーブルのどのカラムを主キーとして使うのかを
+ Hibernateに教えます。
+ 入れ子になっている <literal>generator</literal> 要素は、識別子を生成する時の戦略を指定します。
+ (この例では <literal>native</literal> を用いました)。
+ この要素は、設定したデータベース(dialect)に対する最良な識別子生成戦略を選定するものです。
+ Hibernateは、アプリケーションで値を割り当てる戦略(もしくは独自に拡張した戦略)と同様に、
+ グローバルにユニークな値をデータベースに生成させる戦略もサポートしています。
</para>
<para>
- �Ō�ɃN���X�̉i���v���p�e�B�̐錾��}�b�s���O�t�@�C���Ɋ܂߂܂��B
- �f�t�H���g�ł́A�N���X�̃v���p�e�B�͉i���ƌ��Ȃ���܂���F
+ 最後にクラスの永続プロパティの宣言をマッピングファイルに含めます。
+ デフォルトでは、クラスのプロパティは永続と見なされません:
</para>
<programlisting><![CDATA[
@@ -280,45 +282,45 @@
</hibernate-mapping>]]></programlisting>
<para>
- <literal>id</literal> �v�f�̏ꍇ�Ɠ��l�ɁA <literal>property</literal> �v�f��
- <literal>name</literal> �����ŁA�ǂ̃Q�b�^�[�ƃZ�b�^�[���\�b�h��g���ׂ�����Hibernate�ɋ����܂��B
- ���̗�ł́AHibernate�� <literal>getDate()/setDate()</literal> �� <literal>getTitle()/setTitle()</literal> ��
- �T���܂��B
+ <literal>id</literal> 要素の場合と同様に、 <literal>property</literal> 要素の
+ <literal>name</literal> 属性で、どのゲッターとセッターメソッドを使うべきかをHibernateに教えます。
+ この例では、Hibernateは <literal>getDate()/setDate()</literal> と <literal>getTitle()/setTitle()</literal> を
+ 探します。
</para>
<para>
- �Ȃ� <literal>date</literal> �v���p�e�B�̃}�b�s���O�ɂ� <literal>column</literal>
- ����������A<literal>title</literal> �v���p�e�B�ɂ͂Ȃ��̂ł��傤���H
- <literal>column</literal> �������Ȃ���AHibernate�̓v���p�e�B����J�������Ƃ��Ďg���܂��B
- ����� <literal>title</literal> �ł͏�肭�s���܂��B
- ������ <literal>date</literal> �͂قƂ�ǂ̃f�[�^�x�[�X�ŗ\���Ȃ̂ŁA
- �Ⴄ���O�Ń}�b�s���O���������悢�̂ł��B
+ なぜ <literal>date</literal> プロパティのマッピングには <literal>column</literal>
+ 属性があり、<literal>title</literal> プロパティにはないのでしょうか?
+ <literal>column</literal> 属性がなければ、Hibernateはプロパティ名をカラム名として使います。
+ これは <literal>title</literal> では上手く行きます。
+ しかし <literal>date</literal> はほとんどのデータベースで予約語なので、
+ 違う名前でマッピングした方がよいのです。
</para>
<para>
- ���ɋ����[���̂� <literal>title</literal> �}�b�s���O�� <literal>type</literal>
- �����������Ă���_�ł��B
- �}�b�s���O�t�@�C���Ő錾���Ďg��type�́A���킩�肩�����܂���Java�̃f�[�^�^�ł͂���܂���B
- SQL�f�[�^�x�[�X�̌^�ł����܂���B
- ����� <emphasis>Hibernate�}�b�s���O�^</emphasis> �ƌĂ��A
- Java����SQL�f�[�^�̌^�ւ܂���SQL����Java�f�[�^�^�֖|��R���o�[�^�ł��B
- �J��Ԃ��ɂȂ�܂����AHibernate�� <literal>type</literal> �������}�b�s���O�t�@�C����ɂȂ���A
- �������R���o�[�W�����ƃ}�b�s���O�^�����ʼn����悤�Ƃ��܂��B
- �iJava�N���X�̃��t���N�V������g�����j���̎������m�́A
- �ꍇ�ɂ���Ă͂��Ȃ������҂܂��͕K�v�Ƃ���f�t�H���g�l�ɂȂ�Ȃ��������܂���B
- <literal>date</literal> �v���p�e�B�̏ꍇ�������ł����B
- Hibernate�͂��́i <literal>java.util.Date</literal> �́j�v���p�e�B��
- SQL�� <literal>date</literal> , <literal>timestamp</literal> ,
- <literal>time</literal> �̂����A�ǂ̃J�����Ƀ}�b�s���O����ׂ��Ȃ̂��킩��܂���B
- <literal>timestamp</literal> �R���o�[�^�Ńv���p�e�B��}�b�s���O���邱�Ƃɂ��A���S�ȓ�����ۑ����܂��B
+ 次に興味深いのは <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> コンバータでプロパティをマッピングすることにより、完全な日時を保存します。
</para>
<para>
- ���̃}�b�s���O�t�@�C���́A<literal>Event.hbm.xml</literal> �Ƃ��� <literal>Event</literal>
- Java�N���X�\�[�X�t�@�C���̂����ׂɃZ�[�u����ׂ��ł��B
- �}�b�s���O�t�@�C���̖������@�͔C�ӂł����A<literal>hbm.xml</literal>
- �T�t�B�b�N�X��Hibernate�̊J���҂̃R�~���j�e�B��ł̏K���ƂȂ��Ă��܂��B
- ���݃f�B���N�g���\���͂��̂悤�ɂȂ��Ă���͂��ł��F
+ このマッピングファイルは、<literal>Event.hbm.xml</literal> として <literal>Event</literal>
+ Javaクラスソースファイルのすぐ隣にセーブするべきです。
+ マッピングファイルの命名方法は任意ですが、<literal>hbm.xml</literal>
+ サフィックスがHibernateの開発者のコミュニティ内での習慣となっています。
+ 現在ディレクトリ構造はこのようになっているはずです:
</para>
<programlisting><![CDATA[.
@@ -330,51 +332,51 @@
Event.hbm.xml]]></programlisting>
<para>
- Hibernate�̎�v�Ȑݒ�𑱂��܂��B
+ Hibernateの主要な設定を続けます。
</para>
</sect2>
<sect2 id="tutorial-firstapp-configuration" revision="2">
- <title>Hibernate�̐ݒ�</title>
+ <title>Hibernateの設定</title>
<para>
- �����܂łʼni���N���X�ƃ}�b�s���O�t�@�C���������܂����B���ꂩ��Hibernate�̐ݒ��s���܂����A
- ���̑O�Ƀf�[�^�x�[�X���K�v�ł��B
- HSQL DB��Java�x�[�X�̃C��������SQL DBMS�ł���AHSQL DB�E�F�u�T�C�g����_�E�����[�h�ł��܂��B
- ���ۂɂ̓_�E�����[�h�������� <literal>hsqldb.jar</literal> �������K�v�ł��B
- ���̃t�@�C����J���t�H���_�� <literal>lib/</literal> �f�B���N�g���ɔz�u���Ă��������B
+ ここまでで永続クラスとマッピングファイルが揃いました。これからHibernateの設定を行いますが、
+ その前にデータベースが必要です。
+ HSQL DBはJavaベースのインメモリSQL DBMSであり、HSQL DBウェブサイトからダウンロードできます。
+ 実際にはダウンロードした中の <literal>hsqldb.jar</literal> だけが必要です。
+ このファイルを開発フォルダの <literal>lib/</literal> ディレクトリに配置してください。
</para>
<para>
- <literal>data</literal> �Ƃ����f�B���N�g����J���f�B���N�g���̃��[�g�ɍ쐬���Ă��������B
- HSQL DB�͂����Ƀf�[�^�t�@�C����i�[���܂��B
- ���̃f�[�^�f�B���N�g���ɂ����� <literal>java -classpath lib/hsqldb.jar org.hsqldb.Server</literal> ����s���A
- �f�[�^�x�[�X��N���������������B
- ����̊J�n�ƁATCP/IP�\�P�b�g�̃o�C���h���m�F�ł��܂��B
- ��قǍ쐬����A�v���P�[�V�����͂����ɐڑ����܂��B
- ������̃`���[�g���A�����Ƀf�[�^�x�[�X��������������A
- HSQL DB��V���b�g�_�E�����āi��ƃE�B���h�E�� <literal>CTRL + C</literal> �����܂��j
- <literal>data/</literal> �f�B���N�g����̃t�@�C����S�ď���������A
- HSQL DB��ċN�����܂��B
+ <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を再起動します。
</para>
<para>
- Hibernate�̓A�v���P�[�V�����̃f�[�^�x�[�X�ɐڑ�����w�Ȃ̂ŁA
- �R�l�N�V�����̏�K�v�ɂȂ�܂��B
- �R�l�N�V������JDBC�R�l�N�V�����v�[����ʂ��čs���܂����A�����ݒ肷��K�v������܂��B
- Hibernate�f�B�X�g���r���[�V�����ɂ͂������̃I�[�v���\�[�X��JDBC�R�l�N�V�����v�[���c�[�����܂܂�Ă��܂����A
- ���̃`���[�g���A���ł�Hibernate�ɑg�ݍ��܂ꂽ�R�l�N�V�����v�[����g���܂��B
- ������i���x���̕i���̃T�[�h�p�[�e�BJDBC�R�l�N�V�����v�[���\�t�g�E�F�A��g��������A
- �N���X�p�X�ɕK�v�ȃ��C�u������R�s�[���āA�قȂ�R�l�N�V�����v�[����ݒ肵�Ȃ����
- �Ȃ�Ȃ����Ƃɒ��ӂ��Ă��������B
+ Hibernateはアプリケーションのデータベースに接続する層なので、
+ コネクションの情報が必要になります。
+ コネクションはJDBCコネクションプールを通じて行われますが、これも設定する必要があります。
+ HibernateディストリビューションにはいくつかのオープンソースのJDBCコネクションプールツールが含まれていますが、
+ このチュートリアルではHibernateに組み込まれたコネクションプールを使います。
+ もし製品レベルの品質のサードパーティJDBCコネクションプールソフトウェアを使いたければ、
+ クラスパスに必要なライブラリをコピーして、異なるコネクションプールを設定しなければ
+ ならないことに注意してください。
</para>
<para>
- Hibernate�̐ݒ�ł́A�P���� <literal>hibernate.properties</literal> �t�@�C���A
- �����菭���������Ă��� <literal>hibernate.cfg.xml</literal> �t�@�C���A
- �܂��͊��S�Ƀv���O������ŃZ�b�g�A�b�v������@�����p�ł��܂��B
- �قƂ�ǂ̃��[�U���D�ނ̂�XML�ݒ�t�@�C���ł��F
+ Hibernateの設定では、単純な <literal>hibernate.properties</literal> ファイル、
+ それより少し洗練されている <literal>hibernate.cfg.xml</literal> ファイル、
+ または完全にプログラム上でセットアップする方法が利用できます。
+ ほとんどのユーザが好むのはXML設定ファイルです:
</para>
<programlisting><![CDATA[<?xml version='1.0' encoding='utf-8'?>
@@ -417,51 +419,51 @@
</hibernate-configuration>]]></programlisting>
<para>
- ����XML�̐ݒ肪�قȂ�DTD��g�����Ƃɒ��ӂ��Ă��������B
- ����̃f�[�^�x�[�X����O���[�o���t�@�N�g���ł���Hibernate��
- <literal>SessionFactory</literal> ��ݒ肵�܂��B
- ��������̃f�[�^�x�[�X������ꍇ�ɂ́A
- �i�X�^�[�g�A�b�v��ȒP�ɂ��邽�߁j�ʏ킢�����̐ݒ�t�@�C����ŁA
- �������� <literal><session-factory></literal> ��g���ݒ�ɂ��Ă��������B
+ このXMLの設定が異なるDTDを使うことに注意してください。
+ 特定のデータベースを受け持つグローバルファクトリであるHibernateの
+ <literal>SessionFactory</literal> を設定します。
+ もし複数のデータベースがある場合には、
+ (スタートアップを簡単にするため)通常いくつかの設定ファイル内で、
+ いくつかの <literal><session-factory></literal> を使う設定にしてください。
</para>
<para>
- �ŏ���4�� <literal>property</literal> �v�f��JDBC�R�l�N�V�����ɕK�v�Ȑݒ��܂�ł��܂��B
- dialect�Ƃ������O�� <literal>property</literal> �v�f�́AHibernate��������������SQL������w�肵�܂��B
- �i���I�ȃR���e�L�X�g�ɑ���Hibernate�̃Z�b�V�����̎����Ǘ��́A��̗�ł����ɂ킩��悤�ɁA��ɗ����Ƃł��傤�B
- <literal>hbm2ddl.auto</literal> �I�v�V�����̓f�[�^�x�[�X�X�L�[�}�̎���������on�ɂ��܂��B
- ����͒��ڃf�[�^�x�[�X�ɑ��Đ�������܂��B
- ���R�iconfig�I�v�V������폜���ājoff�ɂ�����A
- <literal>SchemaExport</literal> �Ƃ���Ant�^�X�N�̏������ăt�@�C���Ƀ��_�C���N�g������ł��܂��B
- �Ō�ɉi���N���X�̂��߂̃}�b�s���O�t�@�C����ݒ�ɒlj����܂��B
+ 最初の4つの <literal>property</literal> 要素はJDBCコネクションに必要な設定を含んでいます。
+ dialectという名前の <literal>property</literal> 要素は、Hibernateが生成する特定のSQL方言を指定します。
+ 永続的なコンテキストに対するHibernateのセッションの自動管理は、後の例ですぐにわかるように、役に立つことでしょう。
+ <literal>hbm2ddl.auto</literal> オプションはデータベーススキーマの自動生成をonにします。
+ これは直接データベースに対して生成されます。
+ 当然(configオプションを削除して)offにしたり、
+ <literal>SchemaExport</literal> というAntタスクの助けを借りてファイルにリダイレクトしたりできます。
+ 最後に永続クラスのためのマッピングファイルを設定に追加します。
</para>
<para>
- ���̃t�@�C����\�[�X�f�B���N�g���ɃR�s�[���Ă��������B
- ����Ƃ���̓N���X�p�X�̃��[�g�ɂ��邱�ƂɂȂ�܂��B
- Hibernate�́A�X�^�[�g�A�b�v���ɃN���X�p�X�̃��[�g�� <literal>hibernate.cfg.xml</literal>
- �Ƃ����t�@�C�������I�ɒT���܂��B
+ このファイルをソースディレクトリにコピーしてください。
+ するとこれはクラスパスのルートにあることになります。
+ Hibernateは、スタートアップ時にクラスパスのルートで <literal>hibernate.cfg.xml</literal>
+ というファイルを自動的に探します。
</para>
</sect2>
<sect2 id="tutorial-firstapp-ant" revision="1">
- <title>Ant�ɂ��r���h</title>
+ <title>Antによるビルド</title>
<para>
- ����ł�Ant��g���ă`���[�g���A����r���h���܂��傤�B
- ����ɂ�Ant���C���X�g�[������Ă��Ȃ���Ȃ�܂���B
- <ulink url="http://ant.apache.org/bindownload.cgi">Ant�_�E�����[�h�y�[�W</ulink>
- ����_�E�����[�h�����������B
- Ant�̃C���X�g�[�����@�͂����ł͐�����܂���̂ŁA
- <ulink url="http://ant.apache.org/manual/index.html">Ant�}�j���A��</ulink>
- ��Q�Ƃ��Ă��������B
- Ant��C���X�g�[������A�r���h�t�@�C���̍쐬��J�n�ł��܂��B
- ���̃t�@�C���� <literal>build.xml</literal> �ƌĂ�A�J���f�B���N�g���ɒ��ڔz�u���܂��B
+ それでは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> と呼ばれ、開発ディレクトリに直接配置します。
</para>
<para>
- ��{�I�ȃr���h�t�@�C���͂��̂悤�ɂȂ�܂��F
+ 基本的なビルドファイルはこのようになります:
</para>
<programlisting><![CDATA[<project name="hibernate-tutorial" default="compile">
@@ -498,21 +500,21 @@
</project>]]></programlisting>
<para>
- ����� <literal>.jar</literal> �ŏI���lib�f�B���N�g���̂��ׂẴt�@�C����A
- �R���p�C���Ɏg�p����N���X�p�X�ɒlj����邱�Ƃ�Ant�ɋ����܂��B
- �܂��AJava�\�[�X�t�@�C���łȂ����ׂẴt�@�C����^�[�Q�b�g�f�B���N�g���ɃR�s�[����Ƃ������Ƃł����܂��B
- �Ⴆ�ΐݒ�t�@�C����Hibernate�}�b�s���O�t�@�C���Ȃǂł��B
- ��Ant����s����ƁA���̂悤�ȏo�͂�����͂��ł��F
+ これは <literal>.jar</literal> で終わるlibディレクトリのすべてのファイルを、
+ コンパイルに使用するクラスパスに追加することをAntに教えます。
+ また、Javaソースファイルでないすべてのファイルをターゲットディレクトリにコピーするということでもあります。
+ 例えば設定ファイルやHibernateマッピングファイルなどです。
+ 今Antを実行すると、このような出力があるはずです:
</para>
- <programlisting><![CDATA[C:\hibernateTutorial\>ant
+ <programlisting><![CDATA[C:¥hibernateTutorial¥>ant
Buildfile: build.xml
copy-resources:
- [copy] Copying 2 files to C:\hibernateTutorial\bin
+ [copy] Copying 2 files to C:¥hibernateTutorial¥bin
compile:
- [javac] Compiling 1 source file to C:\hibernateTutorial\bin
+ [javac] Compiling 1 source file to C:¥hibernateTutorial¥bin
BUILD SUCCESSFUL
Total time: 1 second ]]></programlisting>
@@ -520,24 +522,24 @@
</sect2>
<sect2 id="tutorial-firstapp-helpers" revision="3">
- <title>�X�^�[�g�A�b�v�ƃw���p</title>
+ <title>スタートアップとヘルパ</title>
<para>
- ���� <literal>Event</literal> �I�u�W�F�N�g���[�h������i�[�����肷�鏀�����ł��܂����B
- �������܂��̓C���t���X�g���N�`���̃R�[�h�����āA�Z�b�g�A�b�v��������K�v������܂��B
- �܂���Hibernate��X�^�[�g�A�b�v���Ȃ���Ȃ�܂���B
- ���̃X�^�[�g�A�b�v�ɂ́A�O���[�o���� <literal>SessionFactory</literal> �I�u�W�F�N�g�����āA
- �����A�v���P�[�V�����̃R�[�h�ŃA�N�Z�X���₷���ꏊ�Ɋi�[���邱�Ƃ��܂܂�܂��B
- <literal>SessionFactory</literal> �͐V���� <literal>Session</literal> ��I�[�v�����邱�Ƃ��ł��܂��B
- <literal>Session</literal> �̓V���O���X���b�h�̍�ƒP��(Unit of Work)��\�����܂��B
- ����ɑ�<literal>SessionFactory</literal> �̓X���b�h�Z�[�t�̃O���[�o���I�u�W�F�N�g�ł���A
- ��x�����C���X�^���X������܂��B
+ さて <literal>Event</literal> オブジェクトをロードしたり格納したりする準備ができました。
+ しかしまずはインフラストラクチャのコードを書いて、セットアップを完了する必要があります。
+ まずはHibernateをスタートアップしなければなりません。
+ このスタートアップには、グローバルの <literal>SessionFactory</literal> オブジェクトを生成して、
+ それをアプリケーションのコードでアクセスしやすい場所に格納することが含まれます。
+ <literal>SessionFactory</literal> は新しく <literal>Session</literal> をオープンすることができます。
+ <literal>Session</literal> はシングルスレッドの作業単位(Unit of Work)を表現します。
+ それに対し<literal>SessionFactory</literal> はスレッドセーフのグローバルオブジェクトであり、
+ 一度だけインスタンス化されます。
</para>
<para>
- �����ŃX�^�[�g�A�b�v��s���A �֗��� <literal>SessionFactory</literal> �փA�N�Z�X����
- <literal>HibernateUtil</literal> �w���p�N���X��쐬���܂��B
- �������Ă݂܂��傤�F
+ ここでスタートアップを行い、 便利に <literal>SessionFactory</literal> へアクセスする
+ <literal>HibernateUtil</literal> ヘルパクラスを作成します。
+ 実装を見てみましょう:
</para>
<programlisting><![CDATA[package util;
@@ -567,26 +569,26 @@
}]]></programlisting>
<para>
- ���̃N���X�͐ÓI�������u���b�N�i�N���X�����[�h�����Ƃ���JVM�ɂ���Ĉ�x�����Ă��j
- �ŃO���[�o���� <literal>SessionFactory</literal> �����邾���ł͂Ȃ��A
- �ÓI�V���O���g���̎g�p��B�����܂��B
- �A�v���P�[�V�����T�[�o�[��JNDI���� <literal>SessionFactory</literal> ��
- ���b�N�A�b�v����̂Ɠ��l�ł��B
+ このクラスは静的初期化ブロック(クラスがロードされるときにJVMによって一度だけ呼ばれる)
+ でグローバルの <literal>SessionFactory</literal> を生成するだけではなく、
+ 静的シングルトンの使用を隠蔽します。
+ アプリケーションサーバーのJNDIから <literal>SessionFactory</literal> を
+ ルックアップするのと同様です。
</para>
<para>
- �ݒ�t�@�C����� <literal>SessionFactory</literal> �ɖ��O��^����ƁA
- Hibernate�� <literal>SessionFactory</literal> �\�z���JNDI�ɑ��o�C���h��s�����Ƃ��܂��B
- ���̃R�[�h���S�ɔr�����邽�߂ɂ́A
- JMX�f�v���C�����g�𗘗p����
- JMX�𗘗p�ł���R���e�i��C���X�^���X�����A
- <literal>HibernateService</literal> ��JNDI�փo�C���h���邱�Ƃ�ł��܂��B
- �����̍��x�ȃI�v�V�����́AHibernate�̃��t�@�����X�h�L�������g�Ő������Ă��܂��B
+ 設定ファイル内で <literal>SessionFactory</literal> に名前を与えると、
+ Hibernateは <literal>SessionFactory</literal> 構築後にJNDIに対しバインドを行おうとします。
+ このコードを完全に排除するためには、
+ JMXデプロイメントを利用して
+ JMXを利用できるコンテナをインスタンス化し、
+ <literal>HibernateService</literal> をJNDIへバインドすることもできます。
+ これらの高度なオプションは、Hibernateのリファレンスドキュメントで説明されています。
</para>
<para>
- <literal>HibernateUtil.java</literal> ��J���\�[�X�f�B���N�g���ɂ��� <literal>events</literal> �p�b�P�[�W��
- �ׂɔz�u���Ă��������B
+ <literal>HibernateUtil.java</literal> を開発ソースディレクトリにある <literal>events</literal> パッケージの
+ 隣に配置してください。
</para>
<programlisting><![CDATA[.
@@ -603,31 +605,31 @@
build.xml]]></programlisting>
<para>
- ����͖��Ȃ��ăR���p�C���ł���͂��ł��B
- �Ō�Ƀ��M���O�V�X�e����ݒ肷��K�v������܂��B
- Hibernate��commons logging��g�����߁ALog4j��JDK 1.4 logging�̑I�����K�v������܂���B
- �قƂ�ǂ̊J���҂��D�ނ̂�Log4j�ł��B
- Hibernate�f�B�X�g���r���[�V�����i��<literal>etc/</literal> �f�B���N�g���j����
- <literal>log4j.properties</literal> ���Ȃ��� <literal>src</literal> �f�B���N�g�����
- <literal>hibernate.cfg.xml</literal> �ׂ̗ɃR�s�[���Ă��������B
- �ݒ����āA�璷�ȏo�͂��悯��ΐݒ��ύX���Ă��������B
- �f�t�H���g�ł�Hibernate�̃X�^�[�g�A�b�v���b�Z�[�W�������W���o�͂ɕ\������܂��B
+ これは問題なく再コンパイルできるはずです。
+ 最後にロギングシステムを設定する必要があります。
+ 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のスタートアップメッセージだけが標準出力に表示されます。
</para>
<para>
- �`���[�g���A���̃C���t���͊��S�ł��B
- Hibernate��g���Ď��ۂ̍�Ƃ��鏀���������܂����B
+ チュートリアルのインフラは完全です。
+ Hibernateを使って実際の作業をする準備が整いました。
</para>
</sect2>
<sect2 id="tutorial-firstapp-workingpersistence" revision="4">
- <title>�I�u�W�F�N�g�̃��[�h�Ɗi�[</title>
+ <title>オブジェクトのロードと格納</title>
<para>
- ���ɃI�u�W�F�N�g�̃��[�h�Ɗi�[��Hibernate��g�����Ƃ��ł��܂��B
- <literal>main()</literal> ���\�b�h���� <literal>EventManager</literal>
- �N���X�����܂��F
+ ついにオブジェクトのロードと格納にHibernateを使うことができます。
+ <literal>main()</literal> メソッドを持つ <literal>EventManager</literal>
+ クラスを書きます:
</para>
<programlisting><![CDATA[package events;
@@ -667,48 +669,48 @@
}]]></programlisting>
<para>
- �V���� <literal>Event</literal> �I�u�W�F�N�g�����A�����Hibernate�ɓn���܂��B
- ���ł�Hibernate��SQL�������A�f�[�^�x�[�X�� <literal>INSERT</literal> ����s���܂��B
- ���s�O�� <literal>Session</literal> �� <literal>Transaction</literal>
- ��������R�[�h��m�F�����������B
+ 新しい <literal>Event</literal> オブジェクトを生成し、それをHibernateに渡します。
+ 今ではHibernateがSQLを処理し、データベースで <literal>INSERT</literal> を実行します。
+ 実行前に <literal>Session</literal> と <literal>Transaction</literal>
+ を処理するコードを確認してください。
</para>
<para>
- <literal>Session</literal> ��1�̍�ƒP��(Unit of Work)�ł��B
- �����̊ԁA�b��ȒP�ɂ��邽�߂ɁA
- <literal>Session</literal> �� <literal>Transaction</literal> �̑Ή����Έ�Ɖ��肵�܂��B
- �g�p���Ă���g�����U�N�V�����E�V�X�e���i���̃P�[�X�ł�JTA�Ƌ����ł���P����JDBC�j����R�[�h��ی삷�邽�߂ɁA
- Hibernate <literal>Session</literal> ��ŗ��p�\�� <literal>Transaction</literal> API��g�p���܂��B
+ <literal>Session</literal> は1つの作業単位(Unit of Work)です。
+ 当分の間、話を簡単にするために、
+ <literal>Session</literal> と <literal>Transaction</literal> の対応を一対一と仮定します。
+ 使用しているトランザクション・システム(このケースではJTAと共存できる単純なJDBC)からコードを保護するために、
+ Hibernate <literal>Session</literal> 上で利用可能な <literal>Transaction</literal> APIを使用します。
</para>
<para>
- <literal>sessionFactory.getCurrentSession()</literal> �͂Ȃɂ���̂ł��傤���H
- �܂��A�������� <literal>SessionFactory</literal> ��擾���ێ������
- �i <literal>HibernateUtil</literal> �̂������ŊȒP�ł��j�A���̃��\�b�h���x�ł�A
- �ǂ�����ł�Ăяo�����Ƃ��o���܂��B
- <literal>getCurrentSession()</literal> ���\�b�h�͏�Ɂu���݂́v��ƒP��(Unit of Work)��Ԃ��܂��B
- <literal>hibernate.cfg.xml</literal> �̂��̋@�\�̐ݒ�ŁA"thread"��w�肵�����Ƃ�v���o���Ă��������B
- ���̂��ߌ��݂̍�ƒP�ʂ̃X�R�[�v�́A���̃A�v���P�[�V��������s���錻�݂�Java�X���b�h�ł��B
- ����������őS�Ăł͂���܂���B
- <literal>Session</literal> �͍ŏ��ɕK�v�ƂȂ����Ƃ��A�܂�ŏ��� <literal>getCurrentSession()</literal> ��
- �Ăꂽ�Ƃ��ɊJ�n���܂��B
- ���̂Ƃ�Hibernate�ɂ�茻�݂̃X���b�h�Ɍ��ѕt�����܂��B
- �g�����U�N�V�������I���i�R�~�b�g������̓��[���o�b�N�j�����Ƃ��A
- Hibernate��X���b�h���� <literal>Session</literal> ��藣���A�N���[�Y���܂��B
- �Ă� <literal>getCurrentSession()</literal> ��ĂԂƁA
- �V���� <literal>Session</literal> ��擾���ĐV������ƒP�ʂ�X�^�[�g�ł��܂��B
- ���� <emphasis>thread-bound</emphasis> �v���O���~���O�E���f����Hibernate�𗘗p�����ōł�l�C������܂��B
+ <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を利用する上で最も人気があります。
</para>
<para>
- �g�����U�N�V�����̈����Ƌ��E�̏ڂ������ɂ��ẮA
- <xref linkend="transactions"/> �����������B
- ���̗�ł̓G���[������[���o�b�N��������܂��B
+ トランザクションの扱いと境界の詳しい情報については、
+ <xref linkend="transactions"/> を見てください。
+ この例ではエラー処理やロールバックも割愛します。
</para>
<para>
- ���̍ŏ��̃��[�`������s����ɂ́AAnt�̃r���h�t�@�C���ɌĂяo���\�ȃ^�[�Q�b�g��
- �lj����Ȃ���Ȃ�܂���F
+ この最初のルーチンを実行するには、Antのビルドファイルに呼び出し可能なターゲットを
+ 追加しなければなりません:
</para>
<programlisting><![CDATA[<target name="run" depends="compile">
@@ -719,29 +721,29 @@
</target>]]></programlisting>
<para>
- <literal>action</literal> �����̒l�́A�^�[�Q�b�g��ĂԂƂ��ɃR�}���h���C���Őݒ肵�܂��F
+ <literal>action</literal> 引数の値は、ターゲットを呼ぶときにコマンドラインで設定します:
</para>
- <programlisting><![CDATA[C:\hibernateTutorial\>ant run -Daction=store]]></programlisting>
+ <programlisting><![CDATA[C:¥hibernateTutorial¥>ant run -Daction=store]]></programlisting>
<para>
- �R���p�C������ƁAHibernate���X�^�[�g���A���Ȃ��̐ݒ�ɂ��܂����A
- �����̃��O�o�͂�����͂��ł��B
- ���̍Ō�ɂ͈ȉ��̍s������ł��傤�F
+ コンパイルすると、Hibernateがスタートし、あなたの設定によりますが、
+ 多くのログ出力があるはずです。
+ その最後には以下の行があるでしょう:
</para>
<programlisting><![CDATA[[java] Hibernate: insert into EVENTS (EVENT_DATE, title, EVENT_ID) values (?, ?, ?)]]></programlisting>
<para>
- �����Hibernate�����s���� <literal>INSERT</literal> �ŁA
- �N�G�X�`�����}�[�N��JDBC�o�C���h�p�����[�^��\���Ă��܂��B
- �����Ƃ��ăo�C���h�����l���邽�߁A���邢�̓��O�̏璷�����炷���߂ɂ́A
- <literal>log4j.properties</literal> ��`�F�b�N�����������B
+ これはHibernateが実行する <literal>INSERT</literal> で、
+ クエスチョンマークはJDBCバインドパラメータを表しています。
+ 引数としてバインドされる値を見るため、あるいはログの冗長性を減らすためには、
+ <literal>log4j.properties</literal> をチェックしてください。
</para>
<para>
- ����ł͓����悤�Ɋi�[���ꂽ�C�x���g�̈ꗗ���悤�Ǝv���܂��B
- ���̂��߃��C�����\�b�h�ɃI�v�V������lj����܂��F
+ それでは同じように格納されたイベントの一覧を見ようと思います。
+ そのためメインメソッドにオプションを追加します:
</para>
<programlisting><![CDATA[if (args[0].equals("store")) {
@@ -757,7 +759,7 @@
}]]></programlisting>
<para>
- �V���� <literal>listEvents()���\�b�h</literal> ��lj����܂��B
+ 新しい <literal>listEvents()メソッド</literal> も追加します。
</para>
<programlisting><![CDATA[private List listEvents() {
@@ -774,47 +776,47 @@
}]]></programlisting>
<para>
- �����ł��邱�Ƃ́A�f�[�^�x�[�X���瑶�݂��邷�ׂĂ� <literal>Event</literal>
- �I�u�W�F�N�g���[�h����HQL (Hibernate Query Language) �N�G����g�����Ƃł��B
- Hibernate�͓K��SQL�����A�����f�[�^�x�[�X�ɑ���A
- ���̃f�[�^��g���� <literal>Event</literal> �I�u�W�F�N�g�����܂��B
- ���RHQL�ł���ɕ��G�ȃN�G����쐬�ł��܂��B
+ ここですることは、データベースから存在するすべての <literal>Event</literal>
+ オブジェクトをロードするHQL (Hibernate Query Language) クエリを使うことです。
+ Hibernateは適切なSQLを生成し、それをデータベースに送り、
+ そのデータを使って <literal>Event</literal> オブジェクトを生成します。
+ 当然HQLでさらに複雑なクエリを作成できます。
</para>
<para>
- �ȉ��̃X�e�b�v�ŁA���ׂĂ̎��s�ƃe�X�g��s���܂��B
+ 以下のステップで、すべての実行とテストを行います。
</para>
<itemizedlist>
<listitem>
<para>
- hbm2ddl��ʂ��O�Ƀf�[�^�x�[�X�̃f�[�^��쐬���A�f�[�^�x�[�X�X�L�[�}�����邽�߂ɁA
- <literal>ant run -Daction=store</literal> ����s�����������B
+ hbm2ddlを通す前にデータベースのデータを作成し、データベーススキーマを生成するために、
+ <literal>ant run -Daction=store</literal> を実行してください。
</para>
</listitem>
<listitem>
<para>
- ���� <literal>hibernate.cfg.xml</literal> �t�@�C���̃v���p�e�B��R�����g�A�E�g����hbm2ddl���ɂ��Ă��������B
- �ʏ�͌p���I�ɒP�̃e�X�g���Ă���Ԃ�hbm2ddl��L���ɂ��Ă����̂ł����A
- ����ȊO�̏ꍇ��hbm2ddl��N������Ɗi�[���Ă������S�Ẵf�[�^�� <emphasis>�h���b�v</emphasis> ����ł��傤�B
- �ݒ�� <literal>create</literal> �ɂ���ƁA���ʂƂ���
- �uSessionFactory�����̍ہA�X�L�[�}����S�Ẵe�[�u����h���b�v���čč쐬����v�Ƃ����ݒ�ɂȂ�܂��B
+ 今は <literal>hibernate.cfg.xml</literal> ファイルのプロパティをコメントアウトしてhbm2ddlを無効にしてください。
+ 通常は継続的に単体テストをしている間はhbm2ddlを有効にしておくのですが、
+ それ以外の場合にhbm2ddlを起動すると格納しておいた全てのデータを <emphasis>ドロップ</emphasis> するでしょう。
+ 設定を <literal>create</literal> にすると、結果として
+ 「SessionFactory生成の際、スキーマから全てのテーブルをドロップして再作成する」という設定になります。
</para>
</listitem>
</itemizedlist>
<para>
- �� <literal>-Daction=list</literal> �Ǝw�肵��Ant��ĂԂƁA
- ����܂Ŋi�[�����C�x���g��������͂��ł��B
- <literal>store</literal> �A�N�V�����𐔉�ȏ�ĂԂ��Ƃ�\�ł��B
+ 今 <literal>-Daction=list</literal> と指定してAntを呼ぶと、
+ これまで格納したイベントが見えるはずです。
+ <literal>store</literal> アクションを数回以上呼ぶことも可能です。
</para>
<para>
- ���ӁF���߂�Hibernate�ɐG���l�X�̑����������Ŏ��s���邽�߁A<emphasis>Table not found</emphasis> �G���[���b�Z�[�W��
- �ւ��鎿������I�Ɍ������܂��B
- ��������L�̃X�e�b�v�ɏ]���Ahbm2ddl���ŏ��Ɏ��s���ꂽ�Ƃ��Ƀf�[�^�x�[�X�X�L�[�}��쐬���A
- ���̌�̎��s�ɂ����Ă���̃X�L�[�}��g�p����̂ŁA���͋N����Ȃ��ł��傤�B
- �}�b�s���O��f�[�^�x�[�X�X�L�[�}��ύX�����Ƃ��́A�����xhbm2ddl��L���ɂ��Ă��������B
+ 注意:初めてHibernateに触れる人々の多くがここで失敗するため、<emphasis>Table not found</emphasis> エラーメッセージに
+ 関する質問を定期的に見かけます。
+ しかし上記のステップに従えば、hbm2ddlが最初に実行されたときにデータベーススキーマを作成し、
+ その後の実行においてもこのスキーマを使用するので、問題は起こらないでしょう。
+ マッピングやデータベーススキーマを変更したときは、もう一度hbm2ddlを有効にしてください。
</para>
</sect2>
@@ -822,19 +824,19 @@
</sect1>
<sect1 id="tutorial-associations">
- <title>�p�[�g2 - �֘A�̃}�b�s���O</title>
+ <title>パート2 - 関連のマッピング</title>
<para>
- �i���G���e�B�e�B�N���X��e�[�u���Ƀ}�b�s���O���܂����B
- ����ɂ��̏�ɂ������̃N���X�̊֘A��lj����܂��傤�B
- �܂����߂ɃA�v���P�[�V�����ɐl�X��lj����A�ނ炪�Q������C�x���g�̃��X�g��i�[���܂��B
+ 永続エンティティクラスをテーブルにマッピングしました。
+ さらにこの上にいくつかのクラスの関連を追加しましょう。
+ まず初めにアプリケーションに人々を追加し、彼らが参加するイベントのリストを格納します。
</para>
<sect2 id="tutorial-associations-mappinguser" revision="1">
- <title>Person�N���X�̃}�b�s���O</title>
+ <title>Personクラスのマッピング</title>
<para>
- �ŏ��� <literal>Person</literal> �N���X�͒P���ł��F
+ 最初の <literal>Person</literal> クラスは単純です:
</para>
<programlisting><![CDATA[package events;
@@ -853,8 +855,8 @@
}]]></programlisting>
<para>
- <literal>Person.hbm.xml</literal> �Ƃ����V�����}�b�s���O�t�@�C����쐬���Ă�������
- �i�t�@�C���̍ŏ���DTD�ւ̎Q�Ƃ�Y�ꂸ�ɓ���Ă��������j�F
+ <literal>Person.hbm.xml</literal> という新しいマッピングファイルを作成してください
+ (ファイルの最初にDTDへの参照を忘れずに入れてください):
</para>
<programlisting><![CDATA[<hibernate-mapping>
@@ -871,33 +873,33 @@
</hibernate-mapping>]]></programlisting>
<para>
- �Ō��Hibernate�̐ݒ�ɐV�����}�b�s���O��lj����Ă��������F
+ 最後にHibernateの設定に新しいマッピングを追加してください:
</para>
<programlisting><![CDATA[<mapping resource="events/Event.hbm.xml"/>
<mapping resource="events/Person.hbm.xml"/>]]></programlisting>
<para>
- ����ł͂����2�̃G���e�B�e�B�Ԃ̊֘A��쐬���܂��B
- �l�X���C�x���g�ɎQ���ł��A�C�x���g���Q���҂��͖̂��炩�ł��B
- ����Ȃ���Ȃ�Ȃ��v�̖��́A�����A���d�x�A�R���N�V�����̐U�镑���ł��B
+ それではこれら2つのエンティティ間の関連を作成します。
+ 人々がイベントに参加でき、イベントが参加者を持つのは明らかです。
+ 扱わなければならない設計の問題は、方向、多重度、コレクションの振る舞いです。
</para>
</sect2>
<sect2 id="tutorial-associations-unidirset" revision="3">
- <title>�P����Set�x�[�X�֘A</title>
+ <title>単方向Setベース関連</title>
<para>
- �C�x���g�̃R���N�V������ <literal>Person</literal> �N���X�ɒlj����܂��B
- �������Ă����ƁA�����I�ȃN�G���A�܂�킴�킴<literal>aPerson.getEvents()</literal>��Ăяo�����ɁA
- ����̐l�ɕR�t���C�x���g��ȒP�Ƀi�r�Q�[�g���邱�Ƃ��ł��܂��B
- ��������Java�̃R���N�V�����A<literal>Set</literal> ��g���܂��B
- �R���N�V�����͏d���v�f�����Ȃ����A���Ԃ͎������ɂ͈Ӗ����Ȃ�����ł��B
+ イベントのコレクションを <literal>Person</literal> クラスに追加します。
+ こうしておくと、明示的なクエリ、つまりわざわざ<literal>aPerson.getEvents()</literal>を呼び出さずに、
+ 特定の人に紐付くイベントを簡単にナビゲートすることができます。
+ 私たちはJavaのコレクション、<literal>Set</literal> を使います。
+ コレクションは重複要素を持たないし、順番は私たちには意味がないからです。
</para>
<para>
- <literal>Set</literal> �Ŏ��������P�����A���l�֘A���K�v�ł��B
- Java�N���X��ɑΉ�����R�[�h�����ă}�b�s���O���܂��傤�F
+ <literal>Set</literal> で実装される単方向、多値関連が必要です。
+ Javaクラス内に対応するコードを書いてマッピングしましょう:
</para>
<programlisting><![CDATA[public class Person {
@@ -914,16 +916,16 @@
}]]></programlisting>
<para>
- ���̊֘A��}�b�s���O����O�ɁA���Α��ɂ��čl���Ă��������B
- ���炩�Ȃ��Ƃł����A���͂����P�����ɂ��������ł��B
- �t�ɁA <literal>Event</literal> ���ɂ�ʂ̃R���N�V�������邱�Ƃ�ł��܂��B
- �Ⴆ�� <literal>anEvent.getParticipants()</literal> �̂悤�ɁA
- �o�����Ƀi�r�Q�[�g��������A�������邱�Ƃ�ł��܂��B
- ����͋@�\�I�ɂ݂ĕK�v�ł͂���܂���B
- ����̃C�x���g�ɊW����f�[�^��擾���閾�m�ȃN�G����A���ł���s���邱�Ƃ��o���܂����B
- ���̐v�̑I��͊J���҂ɔC����Ă��āA���̋c�_�ɂ�薾�炩�Ȃ̂͊֘A�̑��d�x�ł��B
- �܂藼����u���v�l�ɂ���A <emphasis>���Α�</emphasis> �ƌĂ��֘A�ł��B
- ���̂���Hibernate��many-to-many�}�b�s���O��g���܂��F
+ この関連をマッピングする前に、反対側について考えてください。
+ 明らかなことですが、今はこれを単方向にしただけです。
+ 逆に、 <literal>Event</literal> 側にも別のコレクションを作ることもできます。
+ 例えば <literal>anEvent.getParticipants()</literal> のように、
+ 双方向にナビゲートしたければ、そうすることもできます。
+ これは機能的にみて必要ではありません。
+ 特定のイベントに関係するデータを取得する明確なクエリを、いつでも実行することが出来ました。
+ この設計の選択は開発者に任されていて、この議論により明らかなのは関連の多重度です。
+ つまり両側を「多」値にする、 <emphasis>多対多</emphasis> と呼ばれる関連です。
+ そのためHibernateのmany-to-manyマッピングを使います:
</para>
<programlisting><![CDATA[<class name="events.Person" table="PERSON">
@@ -942,21 +944,21 @@
</class>]]></programlisting>
<para>
- Hibernate�͂���Ƃ������ނ̃R���N�V�����}�b�s���O��T�|�[�g���Ă��܂����A
- �ł��ʓI�Ȃ�̂� <literal><set></literal> �ł��B
- ���Α��֘A�i�܂��� <emphasis>n:m</emphasis> �G���e�B�e�B�����[�V�����V�b�v�j�ɂ́A
- �֘A�e�[�u�����K�v�ł��B
- ���̃e�[�u���̂��ꂼ��̍s�́A�l�ƃC�x���g�Ԃ̃����N��\�����܂��B
- �e�[�u������ <literal>set</literal> �v�f�� <literal>table</literal> �����Őݒ肵�܂��B
- �l���̊֘A�̎��ʎq�J�������� <literal><key></literal> �v�f�ŁA
- �C�x���g���̃J�������� <literal><many-to-many></literal> �� <literal>column</literal>
- �����Œ�`���܂��B
- Hibernate�ɃR���N�V�����̃I�u�W�F�N�g�̃N���X
- �i���m�ɂ́A�Q�Ƃ̃R���N�V�����̔��Α��̃N���X�j�����Ȃ���Ȃ�܂���B
+ 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にコレクションのオブジェクトのクラス
+ (正確には、参照のコレクションの反対側のクラス)を教えなければなりません。
</para>
<para>
- ���̂��߂��̃}�b�s���O�̃f�[�^�x�[�X�X�L�[�}�͈ȉ��̂悤�ɂȂ�܂��B�F
+ そのためこのマッピングのデータベーススキーマは以下のようになります。:
</para>
<programlisting><![CDATA[
@@ -976,10 +978,10 @@
</sect2>
<sect2 id="tutorial-associations-working" revision="2">
- <title>�֘A������</title>
+ <title>関連を働かせる</title>
<para>
- <literal>EventManager</literal> �̐V�������\�b�h�Ől�X�ƃC�x���g��ꏏ�ɂ��܂��傤�F
+ <literal>EventManager</literal> の新しいメソッドで人々とイベントを一緒にしましょう:
</para>
<programlisting><![CDATA[private void addPersonToEvent(Long personId, Long eventId) {
@@ -996,28 +998,28 @@
}]]></programlisting>
<para>
- <literal>Person</literal> �� <literal>Event</literal> ���[�h������A
- ���ʂ̃R���N�V�������\�b�h��g���ĒP���ɂ��̃R���N�V������C�����Ă��������B
- �����̂Ƃ��� <literal>update()</literal> �� <literal>save()</literal>
- �̖����I�ȌĂяo���͂���܂���B
- Hibernate�́A�C�����ꂽ���Ƃɂ��X�V����K�v�̂���R���N�V���������I�Ɍ��m���܂��B
- ����� <emphasis>�����_�[�e�B�`�F�b�N</emphasis> �ƌĂ�A
- �I�u�W�F�N�g�̖��O��date�v���p�e�B��C�����邱�ƂŎ������Ƃ�\�ł��B
- ����炪 <emphasis>�i��</emphasis> ��Ԃɂ������A
- �܂�����Hibernate <literal>Session</literal> �Ƀo�C���h����Ă������
- �i�Ⴆ��ƒP��(Unit of Work)�̒��ŒP�Ƀ��[�h�܂��̓Z�[�u���ꂽ�j�A
- Hibernate�͂ǂ�ȕύX����j�^�[���A�x����������(write-behind)��SQL����s���܂��B
- �ʏ�A��ƒP��(Unit of Work)�̍Ō�ɂ����s����f�[�^�x�[�X�ƃ������̏�Ԃ������鏈���́A
- <emphasis>�t���b�V��</emphasis> �ƌĂ�܂��B
- ���̃R�[�h�ł́A��ƒP��(Unit of Work)�̓f�[�^�x�[�X�g�����U�N�V�����̃R�~�b�g�i������̓��[���o�b�N�j�ŏI�����܂��B
- ����́A <literal>CurrentSessionContext</literal> �N���X�ɑ��� <literal>thread</literal> ��ݒ肵�����߂ł��B
+ <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> を設定したためです。
</para>
<para>
- �قȂ��ƒP��(Unit of Work)�Ől�X�ƃC�x���g���[�h���邱�Ƃ���R�ł��܂��B
- �����łȂ���A�i����ԂɂȂ��Ƃ��i�ȑO�ɉi���ł������Ȃ�A���̏�Ԃ� <emphasis>�����idetached�j</emphasis>
- �ƌĂт܂��j�A <literal>Session</literal> �̊O���ŃI�u�W�F�N�g��C�����܂��B
- ���������Ƃ��ɂ̓R���N�V������ύX���邱�Ƃ�\�ł��F
+ 異なる作業単位(Unit of Work)で人々とイベントをロードすることも当然できます。
+ そうでなければ、永続状態にないとき(以前に永続であったなら、この状態を <emphasis>分離(detached)</emphasis>
+ と呼びます)、 <literal>Session</literal> の外部でオブジェクトを修正します。
+ 分離されるときにはコレクションを変更することも可能です:
</para>
<programlisting><![CDATA[private void addPersonToEvent(Long personId, Long eventId) {
@@ -1049,20 +1051,20 @@
}]]></programlisting>
<para>
- <literal>update</literal> �̌Ăяo���͕����I�u�W�F�N�g��Ăщi�������܂��B
- ����́A�V������ƒP��(Unit of Work)�Ƀo�C���h����ƌ�����ł��傤�B
- ���̂��ߕ����̊Ԃɉ�����ꂽ�ǂ̂悤�ȏC����f�[�^�x�[�X�ɃZ�[�u�ł��܂��B
- �G���e�B�e�B�I�u�W�F�N�g�̃R���N�V�����ւ̏C���i�lj���폜�j����l�ɃZ�[�u�ł��܂��B
+ <literal>update</literal> の呼び出しは分離オブジェクトを再び永続化します。
+ これは、新しい作業単位(Unit of Work)にバインドすると言えるでしょう。
+ そのため分離の間に加えられたどのような修正もデータベースにセーブできます。
+ エンティティオブジェクトのコレクションへの修正(追加・削除)も同様にセーブできます。
</para>
<para>
- ����͍��͂��܂�g���݂�������܂��A
- �����̃A�v���P�[�V�����̐v�ɑg�ݍ��ނ��Ƃ��ł���d�v�ȃR���Z�v�g�ł��B
- ����ł͂��̃G�N�T�T�C�Y�̍Ō�ɁA
- <literal>EventManager</literal> �̃��C�����\�b�h�ɐV�����A�N�V������lj�����
- �R�}���h���C������Ăяo���Ă݂܂��傤�B
- �l��C�x���g�̎��ʎq���K�v�Ȃ�A <literal>save()</literal> ���\�b�h���Ԃ��Ă���܂�
- �i�ꍇ�ɂ���Ă͎��ʎq��Ԃ����߂Ƀ��\�b�h��C������K�v�����邩�����܂���j�B
+ これは今はあまり使いみちがありませんが、
+ 自分のアプリケーションの設計に組み込むことができる重要なコンセプトです。
+ それではこのエクササイズの最後に、
+ <literal>EventManager</literal> のメインメソッドに新しいアクションを追加して
+ コマンドラインから呼び出してみましょう。
+ 人やイベントの識別子が必要なら、 <literal>save()</literal> メソッドが返してくれます
+ (場合によっては識別子を返すためにメソッドを修正する必要があるかもしれません)。
</para>
<programlisting><![CDATA[else if (args[0].equals("addpersontoevent")) {
@@ -1073,36 +1075,36 @@
}]]></programlisting>
<para>
- ����͓����悤�ɏd�v��2�̃N���X�A�܂�2�̃G���e�B�e�B�Ԃ̊֘A�̗�ł����B
- �O�ɏq�ׂ��悤�ɁA�T�^�I�ȃ��f���ɂ́A���ʁu��r�I�d�v�ł͂Ȃ��v���̃N���X�ƌ^������܂��B
- ����܂łɌ����悤�� <literal>int</literal> �� <literal>String</literal> �̂悤�Ȃ�̂ł��B
- ���̂悤�ȃN���X�� <emphasis>�l�^</emphasis> �ƌ����܂��B
- ���̃C���X�^���X�͓���̃G���e�B�e�B�� <emphasis>�ˑ�</emphasis> ���܂��B
- ���̌^�̃C���X�^���X�͓Ǝ���ID�����܂��A
- �G���e�B�e�B�Ԃŋ��L����邱�Ƃ����܂���
- �i�t�@�[�X�g�l�[���������������Ƃ��Ă�A2�l�̐l�͓��� <literal>firstname</literal>
- �I�u�W�F�N�g��Q�Ƃ��܂���j�B
- �l�^�͂�����JDK��Ɍ�����܂����A���ꂾ���ł͂Ȃ�
- �i���ہAHibernate�A�v���P�[�V�����ɂ����Ă��ׂĂ�JDK�N���X�͒l�^�ƌ��Ȃ��܂��j�A
- �Ⴆ�� <literal>Address</literal> �� <literal>MonetaryAmount</literal>
- �̂悤�ȓƎ��̈ˑ��N���X�������Ƃ�ł��܂��B
+ これは同じように重要な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>
+ のような独自の依存クラスを書くこともできます。
</para>
<para>
- �l�^�̃R���N�V������v���邱�Ƃ�ł��܂��B
- ����͑��̃G���e�B�e�B�ւ̎Q�Ƃ̃R���N�V�����Ƃ͊T�O�I�ɔ��ɈقȂ�܂����A
- Java�ł͂قƂ�Ǔ����悤�Ɍ����܂��B
+ 値型のコレクションを設計することもできます。
+ これは他のエンティティへの参照のコレクションとは概念的に非常に異なりますが、
+ Javaではほとんど同じように見えます。
</para>
</sect2>
<sect2 id="tutorial-associations-valuecollections">
- <title>�l�̃R���N�V����</title>
+ <title>値のコレクション</title>
<para>
- �l�^�I�u�W�F�N�g�̃R���N�V������ <literal>Person</literal> �G���e�B�e�B�֒lj����܂��B
- E���[���A�h���X��i�[�������̂ł����A<literal>String</literal> �^��g���Ă���̂ŁA
- �R���N�V�����͍Ă� <literal>Set</literal> �ł��F
+ 値型オブジェクトのコレクションを <literal>Person</literal> エンティティへ追加します。
+ Eメールアドレスを格納したいのですが、<literal>String</literal> 型を使っているので、
+ コレクションは再び <literal>Set</literal> です:
</para>
<programlisting><![CDATA[private Set emailAddresses = new HashSet();
@@ -1115,7 +1117,7 @@
}]]></programlisting>
<para>
- ���� <literal>Set</literal> �̃}�b�s���O�ł��F
+ この <literal>Set</literal> のマッピングです:
</para>
<programlisting><![CDATA[<set name="emailAddresses" table="PERSON_EMAIL_ADDR">
@@ -1124,19 +1126,19 @@
</set>]]></programlisting>
<para>
- �O�̃}�b�s���O�Ɣ�ׂĈႤ�̂� <literal>element</literal> �̕����ł����A
- Hibernate�ɂ��̃R���N�V���������̃G���e�B�e�B�ւ̎Q�Ƃ�܂܂��A
- <literal>String</literal> �^�̗v�f�̃R���N�V������܂ނ��Ƃ����܂��B
- �i�������̖��O(string)��Hibernate�̃}�b�s���O�^�܂��̓R���o�[�^�ł���Ƃ������Ƃł��j�B
- �J��Ԃ��܂����A<literal>set</literal> �v�f�� <literal>table</literal> �����́A
- �R���N�V�����̂��߂̃e�[�u������w�肵�܂��B
- <literal>key</literal> �v�f�̓R���N�V�����e�[�u���̊O���L�[�J���������`���܂��B
- <literal>element</literal> �v�f�� <literal>column</literal> ������ <literal>String</literal>
- �̒l�����ۂɊi�[�����J�����̖��O���`���܂��B
+ 前のマッピングと比べて違うのは <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>
+ の値が実際に格納されるカラムの名前を定義します。
</para>
<para>
- �X�V�����X�L�[�}�����������F
+ 更新したスキーマを見てください:
</para>
<programlisting><![CDATA[
@@ -1154,15 +1156,15 @@
]]></programlisting>
<para>
- �R���N�V�����e�[�u���̎�L�[�́A���ۂ͗����̃J������g���������L�[�ł��邱�Ƃ��킩��܂��B
- ����͐l���Ƃ�E���[���A�h���X���d���ł��Ȃ��Ƃ������ƂŁA
- Java��set�ɗv�������Z�}���e�B�N�X���̂�̂ł��B
+ コレクションテーブルの主キーは、実際は両方のカラムを使った複合キーであることがわかります。
+ これは人ごとにEメールアドレスが重複できないということで、
+ Javaのsetに要求されるセマンティクスそのものです。
</para>
<para>
- �ȑO�l�ƃC�x���g��֘A�Â����Ƃ��ƑS�������悤�ɁA
- ���⎎���ɃR���N�V�����ɗv�f��lj����邱�Ƃ��ł���悤�ɂȂ�܂����B
- �����Ƃ�Java�ł͓����R�[�h�ł��B
+ 以前人とイベントを関連づけたときと全く同じように、
+ 今や試しにコレクションに要素を追加することができるようになりました。
+ 両方ともJavaでは同じコードです。
</para>
<programlisting><![CDATA[private void addEmailToPerson(Long personId, String emailAddress) {
@@ -1179,28 +1181,28 @@
}]]></programlisting>
<para>
- ����A�R���N�V�����̏������� <emphasis>fetch</emphasis> �N�G����g�p���܂���ł����B
- ���̂��߁Agetter���\�b�h�̌Ăяo���ɂ���ăR���N�V�������������邽�߂�SELECT��
- ���s�����̂ŁA�R���N�V�����ɗv�f��lj��ł��܂��B
- SQL�̃��O��Ď����āA�����t�F�b�`��g���čœK�����Ă��������B
+ 今回、コレクションの初期化に <emphasis>fetch</emphasis> クエリを使用しませんでした。
+ そのため、getterメソッドの呼び出しによってコレクションを初期化するためのSELECTが
+ 実行されるので、コレクションに要素を追加できます。
+ SQLのログを監視して、即時フェッチを使って最適化してください。
</para>
</sect2>
<sect2 id="tutorial-associations-bidirectional" revision="1">
- <title>�o�����֘A</title>
+ <title>双方向関連</title>
<para>
- ���ɑo�����֘A��}�b�s���O���܂��B
- Java�ŗ�������l�ƃC�x���g�̊֘A�삳���܂��B
- ������A�f�[�^�x�[�X�X�L�[�}�͕ς��܂��A���d�x�͑��Α��̂܂܂ł��B
- �����[�V���i���f�[�^�x�[�X�̓l�b�g���[�N�v���O���~���O�������_��Ȃ̂ŁA
- �i�r�Q�[�V�����̕����̂悤�Ȃ�̂�K�v�Ƃ��܂���B
- �f�[�^�͂�����̕��@�Ō����蕜���ł���Ƃ������Ƃł��B
+ 次に双方向関連をマッピングします。
+ Javaで両側から人とイベントの関連を動作させます。
+ もちろん、データベーススキーマは変わりませんが、多重度は多対多のままです。
+ リレーショナルデータベースはネットワークプログラミング言語よりも柔軟なので、
+ ナビゲーションの方向のようなものを必要としません。
+ データはあらゆるの方法で見たり復元できるということです。
</para>
<para>
- �܂� <literal>Event</literal> �C�x���g�N���X�ɎQ���҂̃R���N�V������lj����܂��F
+ まず <literal>Event</literal> イベントクラスに参加者のコレクションを追加します:
</para>
<programlisting><![CDATA[private Set participants = new HashSet();
@@ -1214,7 +1216,7 @@
}]]></programlisting>
<para>
- ����ł� <literal>Event.hbm.xml</literal> �Ŋ֘A�̂����瑤��}�b�s���O���Ă��������B
+ それでは <literal>Event.hbm.xml</literal> で関連のこちら側をマッピングしてください。
</para>
<programlisting><![CDATA[<set name="participants" table="PERSON_EVENT" inverse="true">
@@ -1223,43 +1225,43 @@
</set>]]></programlisting>
<para>
- �����̂Ƃ���A������̃}�b�s���O�h�L�������g(XML�t�@�C��)�ł�A���ʂ� <literal>set</literal>
- �}�b�s���O��g���Ă��܂��B
- <literal>key</literal> �� <literal>many-to-many</literal> �̃J���������A
- �����̃}�b�s���O�h�L�������g�œ���ւ��ɂȂ��Ă��邱�Ƃɒ��ڂ��Ă��������B
- �����ōł�d�v�Ȓlj����ڂ́A <literal>Event</literal> �̃R���N�V�����}�b�s���O�� <literal>set</literal>
- �v�f�ɂ��� <literal>inverse="true"</literal> �����ł��B
+ ご覧のとおり、いずれのマッピングドキュメント(XMLファイル)でも、普通の <literal>set</literal>
+ マッピングを使っています。
+ <literal>key</literal> と <literal>many-to-many</literal> のカラム名が、
+ 両方のマッピングドキュメントで入れ替えになっていることに注目してください。
+ ここで最も重要な追加項目は、 <literal>Event</literal> のコレクションマッピングの <literal>set</literal>
+ 要素にある <literal>inverse="true"</literal> 属性です。
</para>
<para>
- ���̎w��̈Ӗ��́A2�̊Ԃ̃G���e�B�e�B�Ԃ̃����N�ɂ��Ă̏���T���K�v������Ƃ��A
- Hibernate�͔��Α��̃G���e�B�e�B�A�܂� <literal>Person</literal> �N���X����T���Ƃ������Ƃł��B
- ��x2�̃G���e�B�e�B�Ԃ̑o���������N���ǂ̂悤�ɍ쐬����邩���킩��A
- ����𗝉��邱�Ƃ͂ƂĂ�ȒP�ł��B
+ この指定の意味は、2つの間のエンティティ間のリンクについての情報を探す必要があるとき、
+ Hibernateは反対側のエンティティ、つまり <literal>Person</literal> クラスから探すということです。
+ 一度2つのエンティティ間の双方向リンクがどのように作成されるかがわかれば、
+ これを理解することはとても簡単です。
</para>
</sect2>
<sect2 id="tutorial-associations-usingbidir">
- <title>�o���������N�̓���</title>
+ <title>双方向リンクの動作</title>
<para>
- �܂��AHibernate���ʏ��Java�̃Z�}���e�B�N�X�ɉe����y�ڂ��Ȃ����Ƃ�S�ɗ��߂Ă����Ă��������B
- �������́A�P�����̗�Ƃ��Ăǂ̂悤�� <literal>Person</literal> �� <literal>Event</literal>
- �̊Ԃ̃����N��쐬�����ł��傤���H
- <literal>Person</literal> �̃C���X�^���X�̃C�x���g�ւ̎Q�Ƃ̃R���N�V������
- <literal>Event</literal> �̃C���X�^���X��lj����܂����B
- ���̂��߂��̃����N��o�����ɂ�������A
- ������O�ł������Α��ɂ�������Ƃ��Ȃ���Ȃ�܂���B
- <literal>Event</literal> �̃R���N�V������ <literal>Person</literal> �ւ�
- �Q�Ƃ�lj�����Ƃ������Ƃł��B
- ���́u�����Ń����N��ݒ肷�邱�Ɓv�͐�ɕK�v�Ȃ̂ŁA�����ĖY��Ȃ��ł��������B
+ まず、Hibernateが通常のJavaのセマンティクスに影響を及ぼさないことを心に留めておいてください。
+ 私たちは、単方向の例としてどのように <literal>Person</literal> と <literal>Event</literal>
+ の間のリンクを作成したでしょうか?
+ <literal>Person</literal> のインスタンスのイベントへの参照のコレクションに
+ <literal>Event</literal> のインスタンスを追加しました。
+ そのためこのリンクを双方向にしたければ、
+ 当たり前ですが反対側にも同じことをしなければなりません。
+ <literal>Event</literal> のコレクションに <literal>Person</literal> への
+ 参照を追加するということです。
+ この「両側でリンクを設定すること」は絶対に必要なので、決して忘れないでください。
</para>
<para>
- �����̊J���҂͐T�d�Ƀv���O��������̂ŁA
- �G���e�B�e�B�̗����ɐ������֘A��ݒ肷�郊���N�Ǘ����\�b�h��쐬���܂��B
- �Ⴆ�� <literal>Person</literal> �ł͈ȉ��̂悤�ɂȂ�܂��B�F
+ 多くの開発者は慎重にプログラムするので、
+ エンティティの両側に正しく関連を設定するリンク管理メソッドを作成します。
+ 例えば <literal>Person</literal> では以下のようになります。:
</para>
<programlisting><![CDATA[protected Set getEvents() {
@@ -1281,52 +1283,52 @@
}]]></programlisting>
<para>
- �R���N�V�����̃Q�b�g�ƃZ�b�g���\�b�h������protected�ɂȂ��Ă��邱�Ƃɒ��ӂ��Ă��������B
- ����͓����p�b�P�[�W�̃N���X��T�u�N���X�̃��\�b�h�͈ˑR�A�N�Z�X���\�ł����A
- �i�قƂ�ǁj���̃p�b�P�[�W�O�̂ǂ̃N���X�ł���ڂ��̃R���N�V������䖳���ɂ��邱�Ƃ�h���܂��B
- �����炭���Α��̃R���N�V�����ɂ�������Ƃ������������ł��傤�B
+ コレクションのゲットとセットメソッドが現在protectedになっていることに注意してください。
+ これは同じパッケージのクラスやサブクラスのメソッドは依然アクセスが可能ですが、
+ (ほとんど)そのパッケージ外のどのクラスでも直接そのコレクションを台無しにすることを防ぎます。
+ おそらく反対側のコレクションにも同じことをした方がいいでしょう。
</para>
<para>
- <literal>inverse</literal> �}�b�s���O�����Ƃ͂����������ł��傤���H
- �J���҂�Java�ɂƂ��ẮA�o���������N�͒P�ɗ����̎Q�Ƃ𐳂����ݒ肷��Ƃ������Ƃł��B
- ������Hibernate�́i����ᔽ����邽�߂ɁjSQL�� <literal>INSERT</literal> �� <literal>UPDATE</literal>
- ���𐳊m�ɕύX���邽�߂̏\���ȏ������Ă��Ȃ��̂ŁA
- �o�����֘A�v���p�e�B�������߂̉��炩�̏�����K�v�Ƃ��܂��B
- �֘A�̕Б��� <literal>inverse</literal> �ɐݒ肷�邱�ƂŁAHibernate�͊�{�I�ɂ͐ݒ肵���������A
- ���Α��� <emphasis>��</emphasis> �Ƃ��čl���܂��B
- ���ꂾ���ŁAHibernate�͕������i�r�Q�[�V�������f����SQL�f�[�^�x�[�X�X�L�[�}�֕ϊ�����Ƃ���
- ���ׂĂ̖��ɂ��܂��Ώ��ł��܂��B
- �o���Ă����Ȃ���Ȃ�Ȃ����[���͊ȒP�ł��B
- �o�����֘A�͕K���Б��� <literal>inverse</literal> �ɂ���K�v������Ƃ������Ƃł��B
- ��Α��֘A�ł͂���͑����łȂ���Ȃ�܂���B
- ���Α��֘A�ł͂ǂ��瑤�ł�\���܂���B�ǂ���ł�Ⴂ�͂���܂���B
+ <literal>inverse</literal> マッピング属性とはいったい何でしょうか?
+ 開発者とJavaにとっては、双方向リンクは単に両側の参照を正しく設定するということです。
+ しかしHibernateは(制約違反を避けるために)SQLの <literal>INSERT</literal> と <literal>UPDATE</literal>
+ 文を正確に変更するための十分な情報を持っていないので、
+ 双方向関連プロパティを扱うための何らかの助けを必要とします。
+ 関連の片側を <literal>inverse</literal> に設定することで、Hibernateは基本的には設定した側を無視し、
+ 反対側の <emphasis>鏡</emphasis> として考えます。
+ これだけで、Hibernateは方向を持つナビゲーションモデルをSQLデータベーススキーマへ変換するときの
+ すべての問題にうまく対処できます。
+ 覚えておかなければならないルールは簡単です。
+ 双方向関連は必ず片側を <literal>inverse</literal> にする必要があるということです。
+ 一対多関連ではそれは多側でなければなりません。
+ 多対多関連ではどちら側でも構いません。どちらでも違いはありません。
</para>
</sect2>
<para>
- �ł͂��������Web�A�v���P�[�V�����ɂ��Ă݂܂��傤�B
+ ではこれを小さなWebアプリケーションにしてみましょう。
</para>
</sect1>
<sect1 id="tutorial-webapp">
- <title>�p�[�g3 - EventManager Web�A�v���P�[�V����</title>
+ <title>パート3 - EventManager Webアプリケーション</title>
<para>
- Hibernate��Web�A�v���P�[�V�����́A�X�^���h�A���[���̃A�v���P�[�V�����̂悤��
- <literal>Session</literal> �� <literal>Transaction</literal> ��g�p���܂��B
- �������������̈�ʓI�ȃp�^�[�����𗧂��܂��B
- ������ <literal>EventManagerServlet</literal> ��쐬���܂��B���̃T�[�u���b�g�́A
- �f�[�^�x�[�X�Ɋi�[�����S�ẴC�x���g���X�g�ɂł��A�����HTML�t�H�[������V�����C�x���g����͂ł����̂ł��B
+ HibernateのWebアプリケーションは、スタンドアローンのアプリケーションのように
+ <literal>Session</literal> と <literal>Transaction</literal> を使用します。
+ しかしいくつかの一般的なパターンが役立ちます。
+ ここで <literal>EventManagerServlet</literal> を作成します。このサーブレットは、
+ データベースに格納した全てのイベントをリストにでき、さらにHTMLフォームから新しいイベントを入力できるものです。
</para>
<sect2 id="tutorial-webapp-servlet" revision="1">
- <title>��{�I��Servlet�̋L�q</title>
+ <title>基本的なServletの記述</title>
<para>
- �V�����N���X��A�\�[�X�f�B���N�g���� <literal>events</literal> �p�b�P�[�W�ɍ쐬���Ă��������B
+ 新しいクラスを、ソースディレクトリの <literal>events</literal> パッケージに作成してください。
</para>
<programlisting><![CDATA[package events;
@@ -1339,8 +1341,8 @@
}]]></programlisting>
<para>
- Servlet��HTTP�� <literal>GET</literal> ���N�G�X�g�݂̂�������̂ŁA
- <literal>doGet()</literal> ��������܂��B
+ ServletはHTTPの <literal>GET</literal> リクエストのみを処理するので、
+ <literal>doGet()</literal> を実装します。
</para>
<programlisting><![CDATA[protected void doGet(HttpServletRequest request,
@@ -1369,37 +1371,37 @@
}]]></programlisting>
<para>
- ����� <emphasis>session-per-request</emphasis> �Ƃ����p�^�[���ł��B
- Servlet�����N�G�X�g����ƁA <literal>SessionFactory</literal> ��
- <literal>getCurrentSession()</literal> �̍ŏ��̌Ăяo���ŁA
- Hibernate�̐V���� <literal>Session</literal> ���J����܂��B
- ���̂Ƃ��f�[�^�x�[�X�g�����U�N�V�������J�n����܂��B
- �f�[�^�̓ǂݏ����Ɋւ�炸�A���ׂẴf�[�^�A�N�Z�X�̓g�����U�N�V������ōs���܂��B
- �i�A�v���P�[�V������ł̓I�[�g�R�~�b�g���[�h��g�p���܂���j�B
+ これは <emphasis>session-per-request</emphasis> というパターンです。
+ Servletがリクエストを受け取ると、 <literal>SessionFactory</literal> の
+ <literal>getCurrentSession()</literal> の最初の呼び出しで、
+ Hibernateの新しい <literal>Session</literal> が開かれます。
+ そのときデータベーストランザクションが開始されます。
+ データの読み書きに関わらず、すべてのデータアクセスはトランザクション内で行います。
+ (アプリケーション内ではオートコミットモードを使用しません)。
</para>
<para>
- ���ɁA���N�G�X�g�̃A�N�V�����͏�������A���X�|���X�ł���HTML���`�悳��܂��B
- ����ɂ��Ă͂����ɐ�����܂��B
+ 次に、リクエストのアクションは処理され、レスポンスであるHTMLが描画されます。
+ これについてはすぐに説明します。
</para>
<para>
- �Ō�Ƀ��N�G�X�g�̏�����HTML�`�悪���������Ƃ��ɁA��ƒP��(Unit of Work)��I�����܂��B
- ���������`�撆�ɖ�肪���������ꍇ�Aexception���������ăf�[�^�x�[�X�g�����U�N�V�������[���o�b�N���܂��B
- ����� <literal>session-per-request</literal> �p�^�[�����������܂��B
- �S�ẴT�[�u���b�g�Ƀg�����U�N�V�������E�̃R�[�h��������ɁA�T�[�u���b�g�t�B���^�ɋL�q���邱�Ƃ�\�ł��B
- <emphasis>Open Session in View</emphasis> �ƌĂ�邱�̃p�^�[���ɂ��ẮA
- Hibernate��Web�T�C�g��Wiki��Q�Ƃ��Ă��������B
- �T�[�u���b�g�ł͂Ȃ�JSP��HTML�`����悤�Ƃ���ƁA�����ɂ��̃p�^�[���ɂ��Ă̏�K�v�ɂȂ�ł��傤�B
+ 最後にリクエストの処理とHTML描画が完了したときに、作業単位(Unit of Work)を終了します。
+ もし処理や描画中に問題が発生した場合、exceptionが投げられてデータベーストランザクションをロールバックします。
+ これで <literal>session-per-request</literal> パターンが完了します。
+ 全てのサーブレットにトランザクション境界のコードを書く代わりに、サーブレットフィルタに記述することも可能です。
+ <emphasis>Open Session in View</emphasis> と呼ばれるこのパターンについては、
+ HibernateのWebサイトやWikiを参照してください。
+ サーブレットではなくJSPでHTML描画をしようとすると、すぐにこのパターンについての情報が必要になるでしょう。
</para>
</sect2>
<sect2 id="tutorial-webapp-processing" revision="1">
- <title>�����ƕ`��</title>
+ <title>処理と描画</title>
<para>
- �ł́A���N�G�X�g�̏����ƃy�[�W�̕`���������܂��B
+ では、リクエストの処理とページの描画を実装します。
</para>
<programlisting><![CDATA[// Write HTML header
@@ -1430,11 +1432,11 @@
out.close();]]></programlisting>
<para>
- Java��HTML�����݂���R�[�f�B���O�X�^�C���́A��蕡�G�ȃA�v���P�[�V�����ɂ͓K���Ă��Ȃ��ł��傤
- �i���̃`���[�g���A���ł́A��{�I��Hibernate�̃R���Z�v�g�����Ă��邾���ł��邱�Ƃ�o���Ă����Ă��������j�B
- ���̃R�[�h��HTML�̃w�b�_�[�ƃt�b�^�[�̋L�q�ł��B
- ���̃y�[�W�ɂ́A�C�x���g����͂���HTML�t�H�[���ƁA�f�[�^�x�[�X�ɂ���S�ẴC�x���g�̃��X�g���\������܂��B
- �ŏ��̃��\�b�h�͂����P����HTML�o�͂ł��B
+ JavaとHTMLが混在するコーディングスタイルは、より複雑なアプリケーションには適していないでしょう
+ (このチュートリアルでは、基本的なHibernateのコンセプトを示しているだけであることを覚えておいてください)。
+ このコードはHTMLのヘッダーとフッターの記述です。
+ このページには、イベントを入力するHTMLフォームと、データベースにある全てのイベントのリストが表示されます。
+ 最初のメソッドはごく単純なHTML出力です。
</para>
<programlisting><![CDATA[private void printEventForm(PrintWriter out) {
@@ -1447,8 +1449,8 @@
}]]></programlisting>
<para>
- <literal>listEvents()</literal> ���\�b�h�́A���݂̃X���b�h�Ɍ��т�
- Hibernate�� <literal>Session</literal> ��g�p���āA�N�G������s���܂��B
+ <literal>listEvents()</literal> メソッドは、現在のスレッドに結びつく
+ Hibernateの <literal>Session</literal> を使用して、クエリを実行します。
</para>
<programlisting><![CDATA[private void listEvents(PrintWriter out, SimpleDateFormat dateFormatter) {
@@ -1474,8 +1476,8 @@
}]]></programlisting>
<para>
- �Ō�ɁA <literal>store</literal> �A�N�V������ <literal>createAndStoreEvent()</literal> ���\�b�h��
- �Ăяo���܂��B���̃��\�b�h�ł���݂̃X���b�h�� <literal>Session</literal> �𗘗p���܂��B
+ 最後に、 <literal>store</literal> アクションが <literal>createAndStoreEvent()</literal> メソッドを
+ 呼び出します。このメソッドでも現在のスレッドの <literal>Session</literal> を利用します。
</para>
<programlisting><![CDATA[protected void createAndStoreEvent(String title, Date theDate) {
@@ -1488,26 +1490,26 @@
}]]></programlisting>
<para>
- ����ŃT�[�u���b�g�̊����ł��B
- �T�[�u���b�g�ւ̃��N�G�X�g�́A��� <literal>Session</literal> ��
- <literal>Transaction</literal> �ŏ��������ł��傤�B
- �ŏ��̃X�^���h�A���[���̃A�v���P�[�V�����̂悤�ɁA
- Hibernate�͎����I�ɂ����̃I�u�W�F�N�g����s����X���b�h�Ɍ��ѕt���邱�Ƃ��ł��܂��B
- ����ɂ��A�J���҂����R�ɃR�[�h���C���[�����ł��A
- �D���ȕ��@�� <literal>SessionFactory</literal> �ւ̃A�N�Z�X���ł���悤�ɂȂ�܂��B
- �ʏ�A�J���҂͂�������ꂽ�f�U�C����g�p���āA�f�[�^�A�N�Z�X�̃R�[�h��
- �f�[�^�A�N�Z�X�I�u�W�F�N�g�Ɉړ�����ł��傤�iDAO�p�^�[���j�B
- ��葽���̗�́AHibernate��Wiki��Q�Ƃ��Ă��������B
+ これでサーブレットの完成です。
+ サーブレットへのリクエストは、一つの <literal>Session</literal> と
+ <literal>Transaction</literal> で処理されるでしょう。
+ 最初のスタンドアローンのアプリケーションのように、
+ Hibernateは自動的にこれらのオブジェクトを実行するスレッドに結び付けることができます。
+ これにより、開発者が自由にコードをレイヤー分けでき、
+ 好きな方法で <literal>SessionFactory</literal> へのアクセスができるようになります。
+ 通常、開発者はより洗練されたデザインを使用して、データアクセスのコードを
+ データアクセスオブジェクトに移動するでしょう(DAOパターン)。
+ より多くの例は、HibernateのWikiを参照してください。
</para>
</sect2>
<sect2 id="tutorial-webapp-deploy">
- <title>�f�v���C�ƃe�X�g</title>
+ <title>デプロイとテスト</title>
<para>
- ���̃A�v���P�[�V�����̃f�v���C�̂��߂ɁAWeb�A�[�J�C�u�iWAR�j��쐬���Ă��������B
- �ȉ���Ant�^�[�Q�b�g�� <literal>build.xml</literal> �ɉ����Ă��������B
+ このアプリケーションのデプロイのために、Webアーカイブ(WAR)を作成してください。
+ 以下のAntターゲットを <literal>build.xml</literal> に加えてください。
</para>
<programlisting><![CDATA[<target name="war" depends="compile">
@@ -1521,10 +1523,10 @@
</target>]]></programlisting>
<para>
- ���̃^�[�Q�b�g�� <literal>hibernate-tutorial.war</literal> �Ƃ����t�@�C����
- �v���W�F�N�g�f�B���N�g���ɍ쐬���܂��B
- ���̃t�@�C���͂��ׂẴ��C�u������ <literal>web.xml</literal> �L�q�q��܂�ł���A
- �v���W�F�N�g�̃x�[�X�f�B���N�g���ɒu����邱�Ƃ���҂���܂��B
+ このターゲットは <literal>hibernate-tutorial.war</literal> というファイルを
+ プロジェクトディレクトリに作成します。
+ このファイルはすべてのライブラリと <literal>web.xml</literal> 記述子を含んでおり、
+ プロジェクトのベースディレクトリに置かれることを期待されます。
</para>
<programlisting><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
@@ -1545,29 +1547,29 @@
</web-app>]]></programlisting>
<para>
- Web�A�v���P�[�V�����̃R���p�C���ƃf�v���C�̑O�ɁA <literal>jsdk.jar</literal> �Ƃ���
- �lj��̃��C�u�������K�v�Ȃ��Ƃɒ��ӂ��Ă��������B
- �����Java�T�[�u���b�g�̊J���L�b�g�ł��B
- ����܂����̃��C�u���������Ă��Ȃ��Ȃ�ASun�̃E�F�u�T�C�g�œ��肵�āA
- ���C�u�����f�B���N�g���ɃR�s�[���Ă��������B
- �������A����̓R���p�C���ɂ̂ݎg�p����AWAR�p�b�P�[�W����͏��O����܂��B
+ Webアプリケーションのコンパイルとデプロイの前に、 <literal>jsdk.jar</literal> という
+ 追加のライブラリが必要なことに注意してください。
+ これはJavaサーブレットの開発キットです。
+ もしまだこのライブラリを持っていないなら、Sunのウェブサイトで入手して、
+ ライブラリディレクトリにコピーしてください。
+ しかし、これはコンパイルにのみ使用され、WARパッケージからは除外されます。
</para>
<para>
- �r���h�ƃf�v���C�̂��߂ɁA�v���W�F�N�g�f�B���N�g���� <literal>ant war</literal> ��Ăяo���A
- <literal>hibernate-tutorial.war</literal> �t�@�C����Tomcat�� <literal>webapp</literal>
- �f�B���N�g���ɃR�s�[���Ă��������B
- �܂�Tomcat��C���X�g�[�����Ă��Ȃ���A�_�E�����[�h���āA�ȉ��̃C���X�g�[���K�C�h�ɏ]���Ă��������B
- �������A���̃A�v���P�[�V�����̃f�v���C���邽�߂ɁATomcat�̐ݒ��ύX����K�v�͂���܂���B
+ ビルドとデプロイのために、プロジェクトディレクトリで <literal>ant war</literal> を呼び出し、
+ <literal>hibernate-tutorial.war</literal> ファイルをTomcatの <literal>webapp</literal>
+ ディレクトリにコピーしてください。
+ まだTomcatをインストールしていなければ、ダウンロードして、以下のインストールガイドに従ってください。
+ しかし、このアプリケーションのデプロイするために、Tomcatの設定を変更する必要はありません。
</para>
<para>
- ��x�f�v���C����Tomcat��N������A <literal>http://localhost:8080/hibernate-tutorial/eventmanager</literal> ��
- �A�v���P�[�V�����ւ̃A�N�Z�X���\�ł��B
- �ŏ��̃��N�G�X�g���쐬�����T�[�u���b�g�ɓn�����Ƃ��ɁATomcat�̃��O��
- Hibernate�̏�����������m�F���Ă�������
- �i <literal>HibernateUtil</literal> ��̐ÓI�������u���b�N���Ă�Ă��܂��j�B
- �܂��Aexception�����������Ȃ�ڍׂ�m�F���Ă��������B
+ 一度デプロイしてTomcatを起動すれば、 <literal>http://localhost:8080/hibernate-tutorial/eventmanager</literal> で
+ アプリケーションへのアクセスが可能です。
+ 最初のリクエストが作成したサーブレットに渡ったときに、Tomcatのログで
+ Hibernateの初期化処理を確認してください
+ ( <literal>HibernateUtil</literal> 内の静的初期化ブロックが呼ばれています)。
+ また、exceptionが発生したなら詳細を確認してください。
</para>
</sect2>
@@ -1575,24 +1577,24 @@
</sect1>
<sect1 id="tutorial-summary" revision="1">
- <title>�v��</title>
+ <title>要約</title>
<para>
- ���̃`���[�g���A���ł́A�ȒP�ȃX�^���h�A���[����Hibernate�A�v���P�[�V������
- ���K�͂�Web�A�v���P�[�V�����������߂̊�{��Љ�܂����B
+ このチュートリアルでは、簡単なスタンドアローンのHibernateアプリケーションと
+ 小規模のWebアプリケーションを書くための基本を紹介しました。
</para>
<para>
- ���Hibernate�Ɏ��M������A���t�@�����X�h�L�������g�̖ڎ��ɖڂ�ʂ��āA
- �ʔ��������Ǝv���g�s�b�N��T���Ă��������B
- �ł�p�ɂɎ��₪����̂́A�g�����U�N�V���������i<xref linkend="transactions"/>�j�A
- �t�F�b�`�̃p�t�H�[�}���X�i<xref linkend="performance"/>�j�A
- API�̎g�����i<xref linkend="objectstate"/>�j�ƃN�G��
- �i<xref linkend="objectstate-querying"/>�j�ł��B
+ もうHibernateに自信があれば、リファレンスドキュメントの目次に目を通して、
+ 面白そうだと思うトピックを探してください。
+ 最も頻繁に質問があるのは、トランザクション処理(<xref linkend="transactions"/>)、
+ フェッチのパフォーマンス(<xref linkend="performance"/>)、
+ APIの使い方(<xref linkend="objectstate"/>)とクエリ
+ (<xref linkend="objectstate-querying"/>)です。
</para>
<para>
- ����Ɂi���ʂȁj�`���[�g���A�����K�v�Ȃ�AHibernate�E�F�u�T�C�g��Y�ꂸ�Ƀ`�F�b�N���Ă��������B
+ さらに(特別な)チュートリアルが必要なら、Hibernateウェブサイトを忘れずにチェックしてください。
</para>
</sect1>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/content/xml.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/content/xml.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/xml.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,48 +1,50 @@
-<?xml version="1.0" encoding="Shift_JIS"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
<chapter id="xml">
- <title>XML�}�b�s���O</title>
+ <title>XMLマッピング</title>
- <para><emphasis>XML�}�b�s���O��Hibernate3.0�ł͎����I�ȋ@�\�ł���A���Ɋ����I�ɊJ�����ł��B</emphasis></para>
+ <para><emphasis>XMLマッピングはHibernate3.0では試験的な機能であり、非常に活動的に開発中です。</emphasis></para>
<sect1 id="xml-intro" revision="1">
- <title>XML�f�[�^�ł̍��</title>
+ <title>XMLデータでの作業</title>
<para>
- Hibernate�ł͉i������POJO��g���č�Ƃ���̂Ƃقړ����悤�Ȃ����ŁA
- �i������XML�f�[�^��g���č�Ƃł��܂��B
+ Hibernateでは永続性のPOJOを使って作業するのとほぼ同じようなやり方で、
+ 永続性のXMLデータを使って作業できます。
</para>
<para>
- Hibernate��XML�c���[�𑀍삷�邽�߂�API�Ƃ���dom4j��T�|�[�g���Ă��܂��B
- �f�[�^�x�[�X����dom4j�̃c���[������N�G���������Ƃ��ł��A
- �c���[�ɑ��čs�����C���͎����I�Ƀf�[�^�x�[�X�Ɠ�������܂��B
+ HibernateはXMLツリーを操作するためのAPIとしてdom4jをサポートしています。
+ データベースからdom4jのツリーを復元するクエリを書くことができ、
+ ツリーに対して行った修正は自動的にデータベースと同期されます。
- �܂�XML�h�L�������g��擾���邱�Ƃ��ł��Adom4j��g���ăh�L�������g��p�[�X���A
- Hibernate�̔C�ӂ̊�{�����g���ăf�[�^�x�[�X�֏������ނ��Ƃ��ł��܂��B�F
- �܂�A<literal>persist(), saveOrUpdate(), merge(), delete(), replicate()</literal>
- ����ł�(�}�[�W�͂܂��T�|�[�g���Ă��܂���)�B
+ またXMLドキュメントを取得することができ、dom4jを使ってドキュメントをパースし、
+ Hibernateの任意の基本操作を使ってデータベースへ書き込むことができます。:
+ つまり、<literal>persist(), saveOrUpdate(), merge(), delete(), replicate()</literal>
+ 操作です(マージはまだサポートしていません)。
</para>
<para>
- �f�[�^�̃C���|�[�g/�G�N�X�|�[�g�A
- JMS�ɂ��G���e�B�e�B�f�[�^�̊O������SOAP�AXSLT�x�[�X�̃��|�[�g�ȂǁA
- ���̋@�\�ɂ͑����̗p�r������܂��B
+ データのインポート/エクスポート、
+ JMSによるエンティティデータの外部化やSOAP、XSLTベースのレポートなど、
+ この機能には多くの用途があります。
</para>
<para>
- �P��̃}�b�s���O�́A�N���X�̃v���p�e�B��XML�h�L�������g�̃m�[�h��
- �����Ƀf�[�^�x�[�X�փ}�b�s���O���邽�߂Ɏg�����Ƃ��ł��܂��B
- �܂��}�b�s���O����N���X���Ȃ���A
- XML������}�b�s���O���邽�߂Ɏg�����Ƃ��ł��܂��B
+ 単一のマッピングは、クラスのプロパティとXMLドキュメントのノードを
+ 同時にデータベースへマッピングするために使うことができます。
+ またマッピングするクラスがなければ、
+ XMLだけをマッピングするために使うことができます。
</para>
<sect2 id="xml-intro-mapping">
- <title>XML�ƃN���X�̃}�b�s���O���Ɏw�肷��</title>
+ <title>XMLとクラスのマッピングを同時に指定する</title>
<para>
- �����POJO��XML���Ƀ}�b�s���O�����ł��B�F
+ これはPOJOとXMLを同時にマッピングする例です。:
</para>
<programlisting><![CDATA[<class name="Account"
@@ -68,10 +70,10 @@
</sect2>
<sect2 id="xml-onlyxml">
- <title>XML�}�b�s���O������w�肷��</title>
+ <title>XMLマッピングだけを指定する</title>
<para>
- �����POJO�N���X���Ȃ��}�b�s���O�̗�ł��B�F
+ これはPOJOクラスがないマッピングの例です。:
</para>
<programlisting><![CDATA[<class entity-name="Account"
@@ -99,11 +101,11 @@
</class>]]></programlisting>
<para>
- ���̃}�b�s���O�ɂ��Adom4j�c���[���A
- �v���p�e�B��/�l�̑g�̃O���t�ijava�� <literal>Map</literal>�j�Ƃ���
- �f�[�^�ɃA�N�Z�X�ł��܂��B
+ このマッピングにより、dom4jツリーか、
+ プロパティ名/値の組のグラフ(javaの <literal>Map</literal>)として
+ データにアクセスできます。
- �v���p�e�B�̖��O�́AHQL�N�G���[��ŎQ�Ƃł��鏃���Ș_���\���ł��B
+ プロパティの名前は、HQLクエリー内で参照できる純粋な論理構造です。
</para>
</sect2>
@@ -111,53 +113,53 @@
</sect1>
<sect1 id="xml-mapping" revision="1">
- <title>XML�}�b�s���O�̃��^�f�[�^</title>
+ <title>XMLマッピングのメタデータ</title>
<para>
- ������Hibernate�̃}�b�s���O�v�f�́@<literal>node</literal>�@�������g�p�ł��܂��B
- ����ɂ��XML�����̖��O��v���p�e�B��G���e�B�e�B�f�[�^��ێ�����v�f��w��ł��܂��B
- <literal>node</literal>�@�����̃t�H�[�}�b�g�͈ȉ��̒���1�łȂ���Ȃ�܂���B�F
+ 多くのHibernateのマッピング要素は <literal>node</literal> 属性が使用できます。
+ これによりXML属性の名前やプロパティやエンティティデータを保持する要素を指定できます。
+ <literal>node</literal> 属性のフォーマットは以下の中の1つでなければなりません。:
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
- <literal>"element-name"</literal> - �w�肵��XML�v�f�փ}�b�s���O���܂�
+ <literal>"element-name"</literal> - 指定したXML要素へマッピングします
</para>
</listitem>
<listitem>
<para>
- <literal>"@attribute-name"</literal> - �w�肵��XML�����փ}�b�s���O���܂�
+ <literal>"@attribute-name"</literal> - 指定したXML属性へマッピングします
</para>
</listitem>
<listitem>
<para>
- <literal>"."</literal> -�@�e�v�f�փ}�b�s���O���܂�
+ <literal>"."</literal> - 親要素へマッピングします
</para>
</listitem>
<listitem>
<para>
<literal>"element-name/@attribute-name"</literal> -
- �w�肵���G�������g�̎w�肵�������փ}�b�s���O���܂�
+ 指定したエレメントの指定した属性へマッピングします
</para>
</listitem>
</itemizedlist>
<para>
- �R���N�V�����ƒP��̒l�̊֘A�ɑ��āA
- ���܂��� <literal>embed-xml</literal> ����������܂��B
- �f�t�H���g�� <literal>embed-xml="true"</literal> �Ɛݒ肵���ꍇ�A
- �֘A����G���e�B�e�B(�l�^�̃R���N�V����)��XML�c���[�́A
- ���ڊ֘A���L����G���e�B�e�B��XML�c���[��ɖ��ߍ��܂�܂��B
- ���ɁA<literal>embed-xml="false"</literal> �Ɛݒ肵���ꍇ�A
- �Q�Ƃ���鎯�ʎq�̒l���������d�x�P���̊֘A�ɑ���XML�Ɍ���A
- �P���ɃR���N�V�����͂܂���������Ȃ��Ȃ�܂��B
+ コレクションと単一の値の関連に対して、
+ おまけの <literal>embed-xml</literal> 属性があります。
+ デフォルトの <literal>embed-xml="true"</literal> と設定した場合、
+ 関連するエンティティ(値型のコレクション)のXMLツリーは、
+ 直接関連を所有するエンティティのXMLツリー内に埋め込まれます。
+ 反対に、<literal>embed-xml="false"</literal> と設定した場合、
+ 参照される識別子の値だけが多重度1側の関連に対するXMLに現れ、
+ 単純にコレクションはまったく現れなくなります。
</para>
<para>
- ���܂�ɑ����̊֘A�ɑ���
- <literal>embed-xml="true"</literal> �Ƃ����܂܂ɂ���̂͒��ӂ��ׂ��ł��B
- XML�͏z���܂������܂���B
+ あまりに多くの関連に対して
+ <literal>embed-xml="true"</literal> としたままにするのは注意すべきです。
+ XMLは循環をうまく扱えません。
</para>
<programlisting><![CDATA[<class name="Customer"
@@ -196,15 +198,15 @@
</class>]]></programlisting>
<para>
- ���̗�ł́A���ۂ�account�̃f�[�^�ł͂Ȃ��A
- account��id�̃R���N�V�����ߍ��ނ��Ƃɂ��܂����B
- ������HQL�N�G���ł��F
+ この例では、実際のaccountのデータではなく、
+ accountのidのコレクションを埋め込むことにしました。
+ 続きのHQLクエリです:
</para>
<programlisting><![CDATA[from Customer c left join fetch c.accounts where c.lastName like :lastName]]></programlisting>
<para>
- ���̂悤�ȃf�[�^�Z�b�g��Ԃ��ł��傤
+ このようなデータセットを返すでしょう
</para>
<programlisting><![CDATA[<customer id="123456789">
@@ -219,9 +221,9 @@
</customer>]]></programlisting>
<para>
- <literal><one-to-many></literal> �}�b�s���O��
- <literal>embed-xml="true"</literal> �Ɛݒ肵���ꍇ�A
- �f�[�^�͂��̂悤�ɂȂ�ł��傤�B
+ <literal><one-to-many></literal> マッピングで
+ <literal>embed-xml="true"</literal> と設定した場合、
+ データはこのようになるでしょう。
</para>
<programlisting><![CDATA[<customer id="123456789">
@@ -245,11 +247,11 @@
<sect1 id="xml-manipulation" revision="1">
- <title>XML�f�[�^����</title>
+ <title>XMLデータを扱う</title>
<para>
- XML�h�L�������g��A�A�v���P�[�V������ōēǂݍ��݂�X�V���Ă݂܂��傤�B
- �ȉ��ł�dom4j�̃Z�b�V������擾���邱�Ƃōs���܂��B�F
+ XMLドキュメントを、アプリケーション内で再読み込みや更新をしてみましょう。
+ 以下ではdom4jのセッションを取得することで行います。:
</para>
<programlisting><![CDATA[Document doc = ....;
@@ -288,9 +290,9 @@
session.close();]]></programlisting>
<para>
- XML�x�[�X�̃f�[�^�̃C���|�[�g/�G�N�X�|�[�g��������邽�߂ɁA
- Hibernate�� <literal>replicate()</literal> ������̋@�\���т���̂�
- �ɂ߂ėL���ł��B
+ XMLベースのデータのインポート/エクスポートを実装するために、
+ Hibernateの <literal>replicate()</literal> 操作をこの機能を結びつけるのは
+ 極めて有効です。
</para>
</sect1>
Modified: core/trunk/documentation/manual/ja-JP/src/main/docbook/legal_notice.xml
===================================================================
--- core/trunk/documentation/manual/ja-JP/src/main/docbook/legal_notice.xml 2007-10-19 03:15:08 UTC (rev 14109)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/legal_notice.xml 2007-10-19 03:50:52 UTC (rev 14110)
@@ -1,4 +1,4 @@
-<?xml version='1.0'?>
+<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE legalnotice PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<!--
@@ -49,4 +49,4 @@
<para>
CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E
</para>
-</legalnotice>
\ No newline at end of file
+</legalnotice>
17 years, 2 months
Hibernate SVN: r14109 - in core/trunk/cache-jbosscache2/src/test/java/org/hibernate/test/cache/jbc2: timestamp and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: bstansberry(a)jboss.com
Date: 2007-10-18 23:15:08 -0400 (Thu, 18 Oct 2007)
New Revision: 14109
Modified:
core/trunk/cache-jbosscache2/src/test/java/org/hibernate/test/cache/jbc2/query/QueryRegionImplTestCase.java
core/trunk/cache-jbosscache2/src/test/java/org/hibernate/test/cache/jbc2/timestamp/TimestampsRegionImplTestCase.java
Log:
Add evict/evictAll tests for query and timestamps regions
Modified: core/trunk/cache-jbosscache2/src/test/java/org/hibernate/test/cache/jbc2/query/QueryRegionImplTestCase.java
===================================================================
--- core/trunk/cache-jbosscache2/src/test/java/org/hibernate/test/cache/jbc2/query/QueryRegionImplTestCase.java 2007-10-19 03:14:33 UTC (rev 14108)
+++ core/trunk/cache-jbosscache2/src/test/java/org/hibernate/test/cache/jbc2/query/QueryRegionImplTestCase.java 2007-10-19 03:15:08 UTC (rev 14109)
@@ -25,13 +25,12 @@
import org.hibernate.cache.CacheDataDescription;
import org.hibernate.cache.QueryResultsRegion;
import org.hibernate.cache.Region;
+import org.hibernate.cache.StandardQueryCache;
import org.hibernate.cache.jbc2.BasicRegionAdapter;
import org.hibernate.cache.jbc2.CacheInstanceManager;
import org.hibernate.cache.jbc2.JBossCacheRegionFactory;
-import org.hibernate.cache.jbc2.MultiplexedJBossCacheRegionFactory;
-import org.hibernate.cache.jbc2.builder.MultiplexingCacheInstanceManager;
import org.hibernate.cfg.Configuration;
-import org.hibernate.test.cache.jbc2.AbstractRegionImplTestCase;
+import org.hibernate.test.cache.jbc2.AbstractGeneralDataRegionTestCase;
import org.hibernate.test.util.CacheTestUtil;
import org.jboss.cache.Cache;
import org.jboss.cache.Fqn;
@@ -46,12 +45,10 @@
* @author <a href="brian.stansberry(a)jboss.com">Brian Stansberry</a>
* @version $Revision: 1 $
*/
-public class QueryRegionImplTestCase extends AbstractRegionImplTestCase {
+public class QueryRegionImplTestCase extends AbstractGeneralDataRegionTestCase {
+
+// protected static final String REGION_NAME = "test/" + StandardQueryCache.class.getName();
- private static final String KEY = "Key";
- private static final String VALUE1 = "value1";
- private static final String VALUE2 = "value2";
-
/**
* Create a new EntityRegionImplTestCase.
*
@@ -67,6 +64,11 @@
}
@Override
+ protected String getStandardRegionName(String regionPrefix) {
+ return regionPrefix + "/" + StandardQueryCache.class.getName();
+ }
+
+ @Override
protected Cache getJBossCache(JBossCacheRegionFactory regionFactory) {
CacheInstanceManager mgr = regionFactory.getCacheInstanceManager();
return mgr.getQueryCacheInstance();
@@ -76,7 +78,7 @@
protected Fqn getRegionFqn(String regionName, String regionPrefix) {
return Fqn.fromString(BasicRegionAdapter.escapeRegionName(regionName, regionPrefix));
}
-
+
public void testPutDoesNotBlockGetOptimistic() throws Exception {
putDoesNotBlockGetTest("optimistic-shared");
}
@@ -87,13 +89,10 @@
private void putDoesNotBlockGetTest(String configName) throws Exception {
- Configuration cfg = CacheTestUtil.buildConfiguration("test", MultiplexedJBossCacheRegionFactory.class, false, true);
- cfg.setProperty(MultiplexingCacheInstanceManager.QUERY_CACHE_RESOURCE_PROP, configName);
- // Use the local-query config for timestamps as well to save time
- cfg.setProperty(MultiplexingCacheInstanceManager.TIMESTAMP_CACHE_RESOURCE_PROP, configName);
+ Configuration cfg = createConfiguration(configName);
JBossCacheRegionFactory regionFactory = CacheTestUtil.startRegionFactory(cfg, getCacheTestSupport());
- final QueryResultsRegion region = regionFactory.buildQueryResultsRegion("test/com.foo.test", cfg.getProperties());
+ final QueryResultsRegion region = regionFactory.buildQueryResultsRegion(getStandardRegionName(REGION_PREFIX), cfg.getProperties());
region.put(KEY, VALUE1);
assertEquals(VALUE1, region.get(KEY));
@@ -178,18 +177,15 @@
private void getDoesNotBlockPutTest(String configName) throws Exception {
- Configuration cfg = CacheTestUtil.buildConfiguration("test", MultiplexedJBossCacheRegionFactory.class, false, true);
- cfg.setProperty(MultiplexingCacheInstanceManager.QUERY_CACHE_RESOURCE_PROP, configName);
- // Use the local-query config for timestamps as well to save time
- cfg.setProperty(MultiplexingCacheInstanceManager.TIMESTAMP_CACHE_RESOURCE_PROP, configName);
+ Configuration cfg = createConfiguration(configName);
JBossCacheRegionFactory regionFactory = CacheTestUtil.startRegionFactory(cfg, getCacheTestSupport());
- final QueryResultsRegion region = regionFactory.buildQueryResultsRegion("test/com.foo.test", cfg.getProperties());
+ final QueryResultsRegion region = regionFactory.buildQueryResultsRegion(getStandardRegionName(REGION_PREFIX), cfg.getProperties());
region.put(KEY, VALUE1);
assertEquals(VALUE1, region.get(KEY));
- final Fqn rootFqn = getRegionFqn("test/com.foo.test", "test");
+ final Fqn rootFqn = getRegionFqn(getStandardRegionName(REGION_PREFIX), REGION_PREFIX);
final Cache jbc = getJBossCache(regionFactory);
final CountDownLatch blockerLatch = new CountDownLatch(1);
@@ -275,17 +271,7 @@
blockerLatch.countDown();
}
}
-
- private void rollback() {
- try {
- BatchModeTransactionManager.getInstance().rollback();
- }
- catch (Exception e) {
- log.error(e.getMessage(), e);
- }
-
- }
-
+
@CacheListener
public class GetBlocker {
Modified: core/trunk/cache-jbosscache2/src/test/java/org/hibernate/test/cache/jbc2/timestamp/TimestampsRegionImplTestCase.java
===================================================================
--- core/trunk/cache-jbosscache2/src/test/java/org/hibernate/test/cache/jbc2/timestamp/TimestampsRegionImplTestCase.java 2007-10-19 03:14:33 UTC (rev 14108)
+++ core/trunk/cache-jbosscache2/src/test/java/org/hibernate/test/cache/jbc2/timestamp/TimestampsRegionImplTestCase.java 2007-10-19 03:15:08 UTC (rev 14109)
@@ -20,11 +20,12 @@
import org.hibernate.cache.CacheDataDescription;
import org.hibernate.cache.Region;
+import org.hibernate.cache.UpdateTimestampsCache;
import org.hibernate.cache.jbc2.BasicRegionAdapter;
import org.hibernate.cache.jbc2.CacheInstanceManager;
import org.hibernate.cache.jbc2.JBossCacheRegionFactory;
import org.hibernate.cache.jbc2.timestamp.TimestampsRegionImpl;
-import org.hibernate.test.cache.jbc2.AbstractRegionImplTestCase;
+import org.hibernate.test.cache.jbc2.AbstractGeneralDataRegionTestCase;
import org.jboss.cache.Cache;
import org.jboss.cache.Fqn;
@@ -34,7 +35,7 @@
* @author <a href="brian.stansberry(a)jboss.com">Brian Stansberry</a>
* @version $Revision: 1 $
*/
-public class TimestampsRegionImplTestCase extends AbstractRegionImplTestCase {
+public class TimestampsRegionImplTestCase extends AbstractGeneralDataRegionTestCase {
/**
* Create a new EntityRegionImplTestCase.
@@ -60,6 +61,12 @@
protected Fqn getRegionFqn(String regionName, String regionPrefix) {
return BasicRegionAdapter.getTypeFirstRegionFqn(regionName, regionPrefix, TimestampsRegionImpl.TYPE);
}
+
+ @Override
+ protected String getStandardRegionName(String regionPrefix) {
+ return regionPrefix + "/" + UpdateTimestampsCache.class.getName();
+ }
+
}
17 years, 2 months
Hibernate SVN: r14108 - core/trunk/cache-jbosscache2/src/test/java/org/hibernate/test/cache/jbc2/entity.
by hibernate-commits@lists.jboss.org
Author: bstansberry(a)jboss.com
Date: 2007-10-18 23:14:33 -0400 (Thu, 18 Oct 2007)
New Revision: 14108
Modified:
core/trunk/cache-jbosscache2/src/test/java/org/hibernate/test/cache/jbc2/entity/PessimisticReadOnlyTestCase.java
Log:
Clean import
Modified: core/trunk/cache-jbosscache2/src/test/java/org/hibernate/test/cache/jbc2/entity/PessimisticReadOnlyTestCase.java
===================================================================
--- core/trunk/cache-jbosscache2/src/test/java/org/hibernate/test/cache/jbc2/entity/PessimisticReadOnlyTestCase.java 2007-10-19 03:14:08 UTC (rev 14107)
+++ core/trunk/cache-jbosscache2/src/test/java/org/hibernate/test/cache/jbc2/entity/PessimisticReadOnlyTestCase.java 2007-10-19 03:14:33 UTC (rev 14108)
@@ -19,8 +19,6 @@
import junit.framework.Test;
import junit.framework.TestSuite;
-import org.hibernate.cache.access.AccessType;
-
/**
* Tests READ_ONLY access when pessimistic locking and invalidation are used.
*
17 years, 2 months
Hibernate SVN: r14107 - core/trunk/cache-jbosscache2/src/main/java/org/hibernate/cache/jbc2/util.
by hibernate-commits@lists.jboss.org
Author: bstansberry(a)jboss.com
Date: 2007-10-18 23:14:08 -0400 (Thu, 18 Oct 2007)
New Revision: 14107
Modified:
core/trunk/cache-jbosscache2/src/main/java/org/hibernate/cache/jbc2/util/CacheHelper.java
Log:
Add helper method to remove a single node
Modified: core/trunk/cache-jbosscache2/src/main/java/org/hibernate/cache/jbc2/util/CacheHelper.java
===================================================================
--- core/trunk/cache-jbosscache2/src/main/java/org/hibernate/cache/jbc2/util/CacheHelper.java 2007-10-19 03:13:41 UTC (rev 14106)
+++ core/trunk/cache-jbosscache2/src/main/java/org/hibernate/cache/jbc2/util/CacheHelper.java 2007-10-19 03:14:08 UTC (rev 14107)
@@ -372,6 +372,27 @@
throw new CacheException(e);
}
}
+
+ /**
+ * Performs a JBoss Cache <code>removeNode(Fqn)</code>, wrapping any
+ * exception in a {@link CacheException}.
+ *
+ * @param cache
+ * the cache to invoke on
+ * @param region
+ * base Fqn for the cache region
+ * @param option
+ * invocation Option to set for this invocation. May be
+ * <code>null</code>.
+ */
+ public static void removeNode(Cache cache, Fqn region, Object key, Option option) throws CacheException {
+ try {
+ setInvocationOption(cache, option);
+ cache.removeNode(new Fqn(region, key));
+ } catch (Exception e) {
+ throw new CacheException(e);
+ }
+ }
public static Node addNode(Cache cache, Fqn fqn, boolean localOnly, boolean resident, DataVersion version)
throws CacheException {
17 years, 2 months