Author: xhuang(a)jboss.com
Date: 2007-10-25 03:54:59 -0400 (Thu, 25 Oct 2007)
New Revision: 14131
Modified:
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/architecture.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/performance.xml
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/query_hql.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
Log:
match to latest English XML
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-25
06:31:49 UTC (rev 14130)
+++
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/architecture.xml 2007-10-25
07:54:59 UTC (rev 14131)
@@ -1,377 +1,377 @@
-<?xml version="1.0" encoding="UTF-8"?>>
+<?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>ã¢ãŒããã¯ãã£</title>
-
- <sect1 id="architecture-overview" revision="1">
- <title>æŠèг</title>
-
- <para>
- Hibernateã¢ãŒããã¯ãã£ã®ïŒéåžžã«ïŒé«ãã¬ãã«ããã®ãã¥ãŒïŒ
- </para>
-
- <mediaobject>
- <imageobject role="fo">
- <imagedata fileref="../images/overview.svg"
format="SVG" align="center"/>
- </imageobject>
- <imageobject role="html">
- <imagedata fileref="../images/overview.png"
format="PNG" align="center"/>
- </imageobject>
- </mediaobject>
-
- <para>
- ãã®å³ã¯Hibernateããã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠæ°žç¶åãµãŒãã¹
- ïŒãšæ°žç¶ãªããžã§ã¯ãïŒãæäŸããããã«ãããŒã¿ããŒã¹ãšèšå®ããŒã¿ã䜿ãããšã
- 瀺ããŠããŸãã
- </para>
-
- <para>
- ããã§å®è¡æã¢ãŒããã¯ãã£ã®ãã詳现ãªãã¥ãŒããèŠãããŸãããã
- ããã«ããHibernateã¯æè»ã§ããããããããªã¢ãããŒãããµããŒãããŠããŸãã
- ããã§ã¯ã2ã€ã®æ¥µç«¯ãªäŸããèŠãããŸãã
- ã軜ããã¢ãŒããã¯ãã£ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãèªåã®JDBCã³ãã¯ã·ã§ã³ãçšæãã
- ã¢ããªã±ãŒã·ã§ã³èªèº«ããã©ã³ã¶ã¯ã·ã§ã³ã管çããŸãã
- ãã®æ¹æ³ã¯ãHibernate APIã®æå°éã®ãµãã»ããã䜿ããŸãïŒ
- </para>
-
- <mediaobject>
- <imageobject role="fo">
- <imagedata fileref="../images/lite.svg"
format="SVG" align="center"/>
- </imageobject>
- <imageobject role="html">
- <imagedata fileref="../images/lite.png"
format="PNG" align="center"/>
- </imageobject>
- </mediaobject>
-
- <para>
- ãéããã¢ãŒããã¯ãã£ã¯ãã¢ããªã±ãŒã·ã§ã³ããããã®äžã«äœçœ®ããJDBCãJTAã®APIã
- åãæã£ãŠæœè±¡åãããã®è©³çްã®é¢åãHibernateã«èŠãããŸãã
- </para>
-
- <mediaobject>
- <imageobject role="fo">
- <imagedata fileref="../images/full_cream.svg"
format="SVG" align="center"/>
- </imageobject>
- <imageobject role="html">
- <imagedata fileref="../images/full_cream.png"
format="PNG" align="center"/>
- </imageobject>
- </mediaobject>
-
- <para>
- 以äžã¯ãäžã®å³ã«å«ãŸãããªããžã§ã¯ãã®å®çŸ©ã§ãïŒ
-
- <variablelist spacing="compact">
- <varlistentry>
- <term>SessionFactory
(<literal>org.hibernate.SessionFactory</literal>)</term>
- <listitem>
- <para>
- 1ã€ã®ããŒã¿ããŒã¹ã«å¯Ÿããã³ã³ãã€ã«ããããããã³ã°ã®
- ã¹ã¬ããã»ãŒããªïŒæŽæ°äžèœã®ïŒãã£ãã·ã¥ã
- <literal>Session</literal> ã®ãã¡ã¯ããªã§ããã
- <literal>ConnectionProvider</literal> ã®ã¯ã©ã€ã¢ã³ãã
- ãªãã·ã§ã³ãšããŠãããã»ã¹ãŸãã¯ã¯ã©ã¹ã¿ã¬ãã«ã«ãããŠã
- ãã©ã³ã¶ã¯ã·ã§ã³éã§åå©çšå¯èœãªããŒã¿ã®ïŒäºæ¬¡ïŒãã£ãã·ã¥ãæã¡ãŸãã
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>Session
(<literal>org.hibernate.Session</literal>)</term>
- <listitem>
- <para>
- ã¢ããªã±ãŒã·ã§ã³ãšæ°žç¶ã¹ãã¢ãšã®å¯Ÿè©±ã衚ãã
- ã·ã³ã°ã«ã¹ã¬ããã§çåœã®ãªããžã§ã¯ãã
- JDBCã³ãã¯ã·ã§ã³ãã©ããããŸãã
- <literal>Transaction</literal> ã®ãã¡ã¯ããªã§ãã
- æ°žç¶ãªããžã§ã¯ãã®å¿
é ã®ïŒäžæ¬¡ïŒãã£ãã·ã¥ãä¿æããŸãã
- ãã®ãã£ãã·ã¥ã¯ãªããžã§ã¯ãã°ã©ããããã²ãŒã·ã§ã³ããæãã
- èå¥åã§ãªããžã§ã¯ããæ€çŽ¢ããæã«äœ¿ãããŸãã
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>Persistent objects ãš Collections</term>
- <listitem>
- <para>
- æ°žç¶åç¶æ
ãšããžãã¹ã¡ãœãããæã€ãçåœã§ã·ã³ã°ã«ã¹ã¬ããã®ãªããžã§ã¯ãã
- ããã¯éåžžã®JavaBeans/POJOã®ããšããããŸãããç¹åŸŽçãªããšã¯ã
- ãã®æç¹ã§ã®ïŒãã 1ã€ã®ïŒ <literal>Session</literal>
ãšé¢é£ããŠããããšã§ãã
- <literal>Session</literal> ãã¯ããŒãºããããšããã«ã
- ãããã¯åãé¢ãããŠä»ã®ã¢ããªã±ãŒã·ã§ã³å±€ããèªç±ã«äœ¿ãããšãã§ããŸãã
- ïŒäŸãã°ããŒã¿ã»ãã©ã³ã¹ãã¡ã»ãªããžã§ã¯ããšããŠã
- ãã¬ãŒã³ããŒã·ã§ã³å±€ããããŸãã¯ãã¬ãŒã³ããŒã·ã§ã³å±€ãžçŽæ¥äœ¿çšã§ããŸããïŒ
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>Transient ãš detached 㪠objects ãš
Collections</term>
- <listitem>
- <para>
- çŸæç¹ã§ã¯ <literal>Session</literal> ãšé¢é£ããŠããªãã
- æ°žç¶ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã
- ãã§ã«ã¢ããªã±ãŒã·ã§ã³åŽã§ã€ã³ã¹ã¿ã³ã¹åãããŠããŠããŸã æ°žç¶åãããŠããªããã
- ã¯ããŒãºããã <literal>Session</literal>
ã§ã€ã³ã¹ã¿ã³ã¹åããããã®ã©ã¡ããã§ãã
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>Transaction
(<literal>org.hibernate.Transaction</literal>)</term>
- <listitem>
- <para>
- (ãªãã·ã§ã³)ååæ§ãæã€äœæ¥åäœ(Unit of Work)ãæå®ããããã«ãã¢ããªã±ãŒã·ã§ã³ã䜿çšããã
- ã·ã³ã°ã«ã¹ã¬ããã§çåœãªãªããžã§ã¯ãã
- äžã«äœçœ®ããJDBCãJTAãCORBAãã©ã³ã¶ã¯ã·ã§ã³ããã¢ããªã±ãŒã·ã§ã³ãæœè±¡åããŸãã
- <literal>Session</literal> ã¯ãæã«ã¯
- ããã€ãã® <literal>Transaction</literal>
ããŸããããããããŸããã
- ããããäžã®å±€ã®APIã䜿ãã«ããã <literal>Transaction</literal>
ã䜿ãã«ããã
- ãã©ã³ã¶ã¯ã·ã§ã³å¢çãèšå®ããããšã¯ã決ããŠãªãã·ã§ã³ã§ã¯ãããŸããïŒã
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>ConnectionProvider
(<literal>org.hibernate.connection.ConnectionProvider</literal>)</term>
- <listitem>
- <para>
- (ãªãã·ã§ã³)JDBCã³ãã¯ã·ã§ã³ïŒãšãã®ããŒã«ïŒã®ãã¡ã¯ããªã
- äžã®å±€ã«äœçœ®ãã <literal>Datasource</literal> ã
- <literal>DriverManager</literal>
ããã¢ããªã±ãŒã·ã§ã³ãæœè±¡åããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã«ã¯å
¬éãããŸããããéçºè
ãç¶æ¿ãŸãã¯å®è£
ããããšã¯å¯èœã§ãã
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>TransactionFactory
(<literal>org.hibernate.TransactionFactory</literal>)</term>
- <listitem>
- <para>
- (ãªãã·ã§ã³) <literal>Transaction</literal>
ã€ã³ã¹ã¿ã³ã¹ã®ãã¡ã¯ããªã
- ã¢ããªã±ãŒã·ã§ã³ã«ã¯å
¬éãããŸããããéçºè
ãç¶æ¿ãŸãã¯å®è£
ããããšã¯å¯èœã§ãã
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><emphasis>Extension
Interfaces</emphasis></term>
- <listitem>
- <para>
- Hibernateã¯ãæ°žç¶å±€ã®æ¯ãèããã«ã¹ã¿ãã€ãºããããã«ã
- å€ãã®ãªãã·ã§ã³æ¡åŒµã€ã³ã¿ãã§ãŒã¹ãçšæããŠããŸãã
- 詳现ã¯APIããã¥ã¡ã³ããåç
§ããŠãã ããã
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </para>
-
- <para>
- ã軜ããã¢ãŒããã¯ãã£ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯çŽæ¥JTAãJDBCãšå¯Ÿè©±ããããã«ã
- <literal>Transaction</literal> ã
<literal>TransactionFactory</literal> ã
- <literal>ConnectionProvider</literal> ããã€ãã¹ããŸãã
- </para>
- </sect1>
-
- <sect1 id="architecture-states" revision="1">
- <title>ã€ã³ã¹ã¿ã³ã¹ã®ç¶æ
</title>
- <para>
- æ°žç¶ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã¯ã次ã®ïŒã€ã®ç°ãªãç¶æ
ã®ã©ããã«ãªããŸãã
- ããã¯ã <emphasis>æ°žç¶ã³ã³ããã¹ã</emphasis> ã«ãã£ãŠæ±ºãŸããŸãã
- Hibernateã® <literal>Session</literal> ãªããžã§ã¯ãããæ°žç¶ã³ã³ããã¹ãã«ãªããŸãã
- </para>
-
- <variablelist spacing="compact">
- <varlistentry>
- <term>transient</term>
- <listitem>
- <para>
- ãã®ç¶æ
ã®ã€ã³ã¹ã¿ã³ã¹ã¯ãçŸåšããããŠéå»ã«ãããŠãã
- æ°žç¶ã³ã³ããã¹ãã«é¢é£ã¥ããŠããŸããããŸããæ°žç¶IDïŒäž»ããŒã®å€ïŒã
- æã£ãŠããŸããã
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>persistent</term>
- <listitem>
- <para>
- ãã®ç¶æ
ã®ã€ã³ã¹ã¿ã³ã¹ã¯ããã®æç¹ã§æ°žç¶ã³ã³ããã¹ãã«é¢é£ã¥ããŠããŸãã
- ãŸããæ°žç¶IDïŒäž»ããŒã®å€ïŒãæã¡ã
- ãããŠãã¯ããŒã¿ããŒã¹ã«å¯Ÿå¿ããè¡ãæã£ãŠããã§ãããã
- åã
ã®æ°žç¶ã³ã³ããã¹ãã®ãªãã§ã¯ãæ°žç¶IDã
- Javaã®IDïŒãªããžã§ã¯ãã®ã¡ã¢ãªäžã®äœçœ®ïŒãšåãã§ããããšã
- Hibernateã <emphasis>ä¿èšŒ</emphasis> ããŸãã
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>detached</term>
- <listitem>
- <para>
- ãã®ç¶æ
ã®ã€ã³ã¹ã¿ã³ã¹ã¯ããã€ãŠæ°žç¶ã³ã³ããã¹ãã«é¢é£ã¥ãããããã
- ãã®ã³ã³ããã¹ããã¯ããŒãºããããããããã¯ã
- ä»ã®ããã»ã¹ã«ãã®ã€ã³ã¹ã¿ã³ã¹ãã·ãªã¢ã©ã€ãºããããã§ãã
- ãã®ã€ã³ã¹ã¿ã³ã¹ã¯ãæ°žç¶IDãæã¡ããããŠãã¯ããŒã¿ããŒã¹ã«
- 察å¿ããè¡ãæã£ãŠããã§ããããåé¢ã€ã³ã¹ã¿ã³ã¹ã«å¯ŸããŠã¯ã
- æ°žç¶IDãšJavaã®IDãšã®é¢é£ã¯ãHibernateãä¿èšŒããŸããã
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect1>
-
- <sect1 id="architecture-jmx" revision="1">
- <title>JMXãšã®çµ±å</title>
-
- <para>
- JMXã¯Javaã³ã³ããŒãã³ã管çã®J2EEæšæºã§ãã
- JMXæšæºãµãŒãã¹ãéããŠãHibernateã¯ç®¡çãããŸãã
- ãã£ã¹ããªãã¥ãŒã·ã§ã³ã®äžã«
<literal>org.hibernate.jmx.HibernateService</literal> ãšãã
- MBeanå®è£
ãçšæããŠããŸãã
- </para>
-
- <para>
- JBoss ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒäžã«HibernateãJMXãµãŒãã¹ãšããŠãããã€ããæ¹æ³ã®äŸãšããŠã¯ã
- JBoss ãŠãŒã¶ã¬ã€ããåç
§ããŠãã ããã JBoss ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã«ãããŠã
- JMXã䜿ã£ãŠãããã€ãããšã次ã®ã¡ãªãããåŸãããŸãã
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- <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 ãããã€:</emphasis> éåžžã(EAR ãŸã㯠SAR
ãã¡ã€ã«ã«ããïŒJBoss ãµãŒãã¹
- ãããã€ã¡ã³ããã£ã¹ã¯ãªãã¿ã䜿ã£ãŠãHibernate JMX ãµãŒãã¹ããããã€ããŸãã
- ããã¯ãHibernateã® <literal>SessionFactory</literal>
ã®å
šãŠã®äžè¬çãªèšå®ãªãã·ã§ã³ã
- ãµããŒãããŸãããããäŸç¶ãšããŠãããã€ã¡ã³ããã£ã¹ã¯ãªãã¿ã®ãªãã«ãã¹ãŠã®ãããã³ã°ãã¡ã€ã«ã®
- ååãæããå¿
èŠããããŸãã
- ããããªãã·ã§ã³ã®HARãããã€ã¡ã³ãã䜿ãããšã決ãããªãã
- JBossã¯èªåçã«HARãã¡ã€ã«ã®ãªãã®å
šãŠã®ãããã³ã°ãã¡ã€ã«ãæ€åºããŸãã
- </para>
- </listitem>
- </itemizedlist>
-
- <para>
- ãããã®ãªãã·ã§ã³ã«ã€ããŠã®è©³çŽ°ãªæ
å ±ã¯ãJBossã¢ããªã±ãŒã·ã§ã³ãµãŒããŠãŒã¶ã¬ã€ãã
- åèã«ããŠãã ããã
- </para>
-
- <para>
- JMXãµãŒãã¹ãšããŠå©çšå¯èœãªä»ã®æ©èœã«ãHibernateå®è¡æçµ±èšæ
å ±ããããŸãã
- <xref linkend="configuration-optional-statistics"/>
ãèŠãŠãã ããã
- </para>
- </sect1>
-
- <sect1 id="architecture-jca" revision="1">
- <title>JCA ãµããŒã</title>
- <para>
- Hibernate 㯠JCA ã³ãã¯ã¿ãšããŠãèšå®ã§ããŸãã詳现ã«ã€ããŠã¯ãWebãµã€ããèŠãŠãã ããã
- Hibernate JCA ãµããŒãã¯ãä»ã®ãšããå®é𿮵éãšããŠèããããŠããããšã«æ³šæããŠãã ããã
- </para>
- </sect1>
-
- <sect1 id="architecture-current-session" revision="2">
- <title>ã³ã³ããã¹ãäžã®ã»ãã·ã§ã³</title>
- <para>
- Hibernate ã䜿ã£ãã¢ããªã±ãŒã·ã§ã³ã¯ãã»ãšãã©ããªãããã®åœ¢ã§"ã³ã³ããã¹ãäžã®"ã»ãã·ã§ã³ãå¿
èŠã«ãªããŸãã
- ãã³ã³ããã¹ãäžã®ã»ãã·ã§ã³ãã¯ãç¹å®ã®ã³ã³ããã¹ãã®ã¹ã³ãŒãã®ãªãã§æå¹ãªã»ãã·ã§ã³ã®ããšã§ãã
- ããããéåžžã¢ããªã±ãŒã·ã§ã³ããšã«ã³ã³ããã¹ããæ§æãããã®ã®å®çŸ©ã¯ç°ãªããŸãã
- ããããç°ãªãè€æ°ã®ã³ã³ããã¹ãã¯ãçŸæç¹ã«å¯ŸããŠç°ãªãã¹ã³ãŒããå®çŸ©ããŸãã
- ããŒãžã§ã³3.0ããåã® Hibernate ã§ã¯ãèªäœã® <literal>ThreadLocal</literal>
ããŒã¹ã®ãã³ã³ããã¹ãäžã®ã»ãã·ã§ã³ãã
- å©çšãããã <literal>HibernateUtil</literal> ã®ãããªãã«ããŒã¯ã©ã¹ãå©çšãããã
- proxy/interception ããŒã¹ã®ãã³ã³ããã¹ãäžã®ã»ãã·ã§ã³ããæäŸãã
- ïŒSpring ã Pico ã®ãããªïŒãµãŒãããŒãã£ã®ãã¬ãŒã ã¯ãŒã¯ãå©çšãããã®ããããã§ããã
- </para>
-
- <para>
- ããŒãžã§ã³ 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>
- ããããããŒãžã§ã³ 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>
ã€ã³ã¿ãã§ãŒã¹ã®èŠçŽã«ã€ããŠã®
- 詳现ãªå
容㯠Javadoc ãåç
§ããŠãã ããã
- ããã«ã¯ã <literal>currentSession()</literal> ãšãã1ã€ã®ã¡ãœãããå®çŸ©ãããŠããã
- ãã®å®è£
ã¯ãçŸåšã®ãã³ã³ããã¹ãäžã®ã»ãã·ã§ã³ãã远跡ããããšã«è²¬ä»»ãæã¡ãŸãã
- ãã®ãŸãŸäœ¿ããããã«ãHibernateã¯ãã®ã€ã³ã¿ãã§ãŒã¹ã®å®è£
ã2ã€æäŸããŠããŸãã
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
-
<literal>org.hibernate.context.JTASessionContext</literal> -
- <literal>JTA</literal> ãã©ã³ã¶ã¯ã·ã§ã³ã«ãã£ãŠãçŸåšã®ã»ãã·ã§ã³ã远跡ããã
- ã¹ã³ãŒããæ±ºããããŸãããã®åŠçã¯ãå€ãJTAã ãã®ã¢ãããŒããšãŸã£ããåãã§ãã
- 詳现ã¯Javadocãåç
§ããŠãã ããã
- </para>
- </listitem>
- <listitem>
- <para>
-
<literal>org.hibernate.context.ThreadLocalSessionContext</literal> -
- ã¹ã¬ããã®å®è¡ã«ãã£ãŠãçŸåšã®ã»ãã·ã§ã³ã远跡ãããŸãã
- 詳现ã¯Javadocãåç
§ããŠãã ããã
- </para>
- </listitem>
- <listitem>
- <para>
-
<literal>org.hibernate.context.ManagedSessionContext</literal> -
- ã¹ã¬ããã®å®è¡ã«ãã£ãŠãçŸåšã®ã»ãã·ã§ã³ã远跡ãããŸãã
- ãããããã®ã¯ã©ã¹ã®staticã¡ãœããã§ <literal>Session</literal> ã€ã³ã¹ã¿ã³ã¹ã
- ãã€ã³ã/ã¢ã³ãã€ã³ããã責任ã¯ããªãã«ãããŸãã
- ããã¯æ±ºã㊠<literal>Session</literal> ããªãŒãã³ããã©ãã·ã¥ãã¯ããŒãºããŸããã
- </para>
- </listitem>
- </itemizedlist>
-
- <para>
- å§ãã®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>
èšå®ãã©ã¡ãŒã¿ã¯ã
- <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>
-
-</chapter>
-
+
+<chapter id="architecture">
+
+ <title>ã¢ãŒããã¯ãã£</title>
+
+ <sect1 id="architecture-overview" revision="1">
+ <title>æŠèг</title>
+
+ <para>
+ Hibernateã¢ãŒããã¯ãã£ã®ïŒéåžžã«ïŒé«ãã¬ãã«ããã®ãã¥ãŒïŒ
+ </para>
+
+ <mediaobject>
+ <imageobject role="fo">
+ <imagedata fileref="../images/overview.svg"
format="SVG" align="center"/>
+ </imageobject>
+ <imageobject role="html">
+ <imagedata fileref="../images/overview.png"
format="PNG" align="center"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>
+ ãã®å³ã¯Hibernateããã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠæ°žç¶åãµãŒãã¹
+ ïŒãšæ°žç¶ãªããžã§ã¯ãïŒãæäŸããããã«ãããŒã¿ããŒã¹ãšèšå®ããŒã¿ã䜿ãããšã
+ 瀺ããŠããŸãã
+ </para>
+
+ <para>
+ ããã§å®è¡æã¢ãŒããã¯ãã£ã®ãã詳现ãªãã¥ãŒããèŠãããŸãããã
+ ããã«ããHibernateã¯æè»ã§ããããããããªã¢ãããŒãããµããŒãããŠããŸãã
+ ããã§ã¯ã2ã€ã®æ¥µç«¯ãªäŸããèŠãããŸãã
+ ã軜ããã¢ãŒããã¯ãã£ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãèªåã®JDBCã³ãã¯ã·ã§ã³ãçšæãã
+ ã¢ããªã±ãŒã·ã§ã³èªèº«ããã©ã³ã¶ã¯ã·ã§ã³ã管çããŸãã
+ ãã®æ¹æ³ã¯ãHibernate APIã®æå°éã®ãµãã»ããã䜿ããŸãïŒ
+ </para>
+
+ <mediaobject>
+ <imageobject role="fo">
+ <imagedata fileref="../images/lite.svg"
format="SVG" align="center"/>
+ </imageobject>
+ <imageobject role="html">
+ <imagedata fileref="../images/lite.png"
format="PNG" align="center"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>
+ ãéããã¢ãŒããã¯ãã£ã¯ãã¢ããªã±ãŒã·ã§ã³ããããã®äžã«äœçœ®ããJDBCãJTAã®APIã
+ åãæã£ãŠæœè±¡åãããã®è©³çްã®é¢åãHibernateã«èŠãããŸãã
+ </para>
+
+ <mediaobject>
+ <imageobject role="fo">
+ <imagedata fileref="../images/full_cream.svg"
format="SVG" align="center"/>
+ </imageobject>
+ <imageobject role="html">
+ <imagedata fileref="../images/full_cream.png"
format="PNG" align="center"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>
+ 以äžã¯ãäžã®å³ã«å«ãŸãããªããžã§ã¯ãã®å®çŸ©ã§ãïŒ
+
+ <variablelist spacing="compact">
+ <varlistentry>
+ <term>SessionFactory
(<literal>org.hibernate.SessionFactory</literal>)</term>
+ <listitem>
+ <para>
+ 1ã€ã®ããŒã¿ããŒã¹ã«å¯Ÿããã³ã³ãã€ã«ããããããã³ã°ã®
+ ã¹ã¬ããã»ãŒããªïŒæŽæ°äžèœã®ïŒãã£ãã·ã¥ã
+ <literal>Session</literal> ã®ãã¡ã¯ããªã§ããã
+ <literal>ConnectionProvider</literal> ã®ã¯ã©ã€ã¢ã³ãã
+ ãªãã·ã§ã³ãšããŠãããã»ã¹ãŸãã¯ã¯ã©ã¹ã¿ã¬ãã«ã«ãããŠã
+ ãã©ã³ã¶ã¯ã·ã§ã³éã§åå©çšå¯èœãªããŒã¿ã®ïŒäºæ¬¡ïŒãã£ãã·ã¥ãæã¡ãŸãã
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Session
(<literal>org.hibernate.Session</literal>)</term>
+ <listitem>
+ <para>
+ ã¢ããªã±ãŒã·ã§ã³ãšæ°žç¶ã¹ãã¢ãšã®å¯Ÿè©±ã衚ãã
+ ã·ã³ã°ã«ã¹ã¬ããã§çåœã®ãªããžã§ã¯ãã
+ JDBCã³ãã¯ã·ã§ã³ãã©ããããŸãã
+ <literal>Transaction</literal> ã®ãã¡ã¯ããªã§ãã
+ æ°žç¶ãªããžã§ã¯ãã®å¿
é ã®ïŒäžæ¬¡ïŒãã£ãã·ã¥ãä¿æããŸãã
+ ãã®ãã£ãã·ã¥ã¯ãªããžã§ã¯ãã°ã©ããããã²ãŒã·ã§ã³ããæãã
+ èå¥åã§ãªããžã§ã¯ããæ€çŽ¢ããæã«äœ¿ãããŸãã
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Persistent objects ãš Collections</term>
+ <listitem>
+ <para>
+ æ°žç¶åç¶æ
ãšããžãã¹ã¡ãœãããæã€ãçåœã§ã·ã³ã°ã«ã¹ã¬ããã®ãªããžã§ã¯ãã
+ ããã¯éåžžã®JavaBeans/POJOã®ããšããããŸãããç¹åŸŽçãªããšã¯ã
+ ãã®æç¹ã§ã®ïŒãã 1ã€ã®ïŒ <literal>Session</literal>
ãšé¢é£ããŠããããšã§ãã
+ <literal>Session</literal> ãã¯ããŒãºããããšããã«ã
+ ãããã¯åãé¢ãããŠä»ã®ã¢ããªã±ãŒã·ã§ã³å±€ããèªç±ã«äœ¿ãããšãã§ããŸãã
+ ïŒäŸãã°ããŒã¿ã»ãã©ã³ã¹ãã¡ã»ãªããžã§ã¯ããšããŠã
+ ãã¬ãŒã³ããŒã·ã§ã³å±€ããããŸãã¯ãã¬ãŒã³ããŒã·ã§ã³å±€ãžçŽæ¥äœ¿çšã§ããŸããïŒ
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Transient ãš detached 㪠objects ãš
Collections</term>
+ <listitem>
+ <para>
+ çŸæç¹ã§ã¯ <literal>Session</literal> ãšé¢é£ããŠããªãã
+ æ°žç¶ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã
+ ãã§ã«ã¢ããªã±ãŒã·ã§ã³åŽã§ã€ã³ã¹ã¿ã³ã¹åãããŠããŠããŸã æ°žç¶åãããŠããªããã
+ ã¯ããŒãºããã <literal>Session</literal>
ã§ã€ã³ã¹ã¿ã³ã¹åããããã®ã©ã¡ããã§ãã
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Transaction
(<literal>org.hibernate.Transaction</literal>)</term>
+ <listitem>
+ <para>
+ (ãªãã·ã§ã³)ååæ§ãæã€äœæ¥åäœ(Unit of Work)ãæå®ããããã«ãã¢ããªã±ãŒã·ã§ã³ã䜿çšããã
+ ã·ã³ã°ã«ã¹ã¬ããã§çåœãªãªããžã§ã¯ãã
+ äžã«äœçœ®ããJDBCãJTAãCORBAãã©ã³ã¶ã¯ã·ã§ã³ããã¢ããªã±ãŒã·ã§ã³ãæœè±¡åããŸãã
+ <literal>Session</literal> ã¯ãæã«ã¯
+ ããã€ãã® <literal>Transaction</literal>
ããŸããããããããŸããã
+ ããããäžã®å±€ã®APIã䜿ãã«ããã <literal>Transaction</literal>
ã䜿ãã«ããã
+ ãã©ã³ã¶ã¯ã·ã§ã³å¢çãèšå®ããããšã¯ã決ããŠãªãã·ã§ã³ã§ã¯ãããŸããïŒã
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>ConnectionProvider
(<literal>org.hibernate.connection.ConnectionProvider</literal>)</term>
+ <listitem>
+ <para>
+ (ãªãã·ã§ã³)JDBCã³ãã¯ã·ã§ã³ïŒãšãã®ããŒã«ïŒã®ãã¡ã¯ããªã
+ äžã®å±€ã«äœçœ®ãã <literal>Datasource</literal> ã
+ <literal>DriverManager</literal>
ããã¢ããªã±ãŒã·ã§ã³ãæœè±¡åããŸãã
+ ã¢ããªã±ãŒã·ã§ã³ã«ã¯å
¬éãããŸããããéçºè
ãç¶æ¿ãŸãã¯å®è£
ããããšã¯å¯èœã§ãã
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>TransactionFactory
(<literal>org.hibernate.TransactionFactory</literal>)</term>
+ <listitem>
+ <para>
+ (ãªãã·ã§ã³) <literal>Transaction</literal>
ã€ã³ã¹ã¿ã³ã¹ã®ãã¡ã¯ããªã
+ ã¢ããªã±ãŒã·ã§ã³ã«ã¯å
¬éãããŸããããéçºè
ãç¶æ¿ãŸãã¯å®è£
ããããšã¯å¯èœã§ãã
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis>Extension
Interfaces</emphasis></term>
+ <listitem>
+ <para>
+ Hibernateã¯ãæ°žç¶å±€ã®æ¯ãèããã«ã¹ã¿ãã€ãºããããã«ã
+ å€ãã®ãªãã·ã§ã³æ¡åŒµã€ã³ã¿ãã§ãŒã¹ãçšæããŠããŸãã
+ 詳现ã¯APIããã¥ã¡ã³ããåç
§ããŠãã ããã
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+
+ <para>
+ ã軜ããã¢ãŒããã¯ãã£ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯çŽæ¥JTAãJDBCãšå¯Ÿè©±ããããã«ã
+ <literal>Transaction</literal> ã
<literal>TransactionFactory</literal> ã
+ <literal>ConnectionProvider</literal> ããã€ãã¹ããŸãã
+ </para>
+ </sect1>
+
+ <sect1 id="architecture-states" revision="1">
+ <title>ã€ã³ã¹ã¿ã³ã¹ã®ç¶æ
</title>
+ <para>
+ æ°žç¶ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã¯ã次ã®ïŒã€ã®ç°ãªãç¶æ
ã®ã©ããã«ãªããŸãã
+ ããã¯ã <emphasis>æ°žç¶ã³ã³ããã¹ã</emphasis> ã«ãã£ãŠæ±ºãŸããŸãã
+ Hibernateã® <literal>Session</literal> ãªããžã§ã¯ãããæ°žç¶ã³ã³ããã¹ãã«ãªããŸãã
+ </para>
+
+ <variablelist spacing="compact">
+ <varlistentry>
+ <term>transient</term>
+ <listitem>
+ <para>
+ ãã®ç¶æ
ã®ã€ã³ã¹ã¿ã³ã¹ã¯ãçŸåšããããŠéå»ã«ãããŠãã
+ æ°žç¶ã³ã³ããã¹ãã«é¢é£ã¥ããŠããŸããããŸããæ°žç¶IDïŒäž»ããŒã®å€ïŒã
+ æã£ãŠããŸããã
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>persistent</term>
+ <listitem>
+ <para>
+ ãã®ç¶æ
ã®ã€ã³ã¹ã¿ã³ã¹ã¯ããã®æç¹ã§æ°žç¶ã³ã³ããã¹ãã«é¢é£ã¥ããŠããŸãã
+ ãŸããæ°žç¶IDïŒäž»ããŒã®å€ïŒãæã¡ã
+ ãããŠãã¯ããŒã¿ããŒã¹ã«å¯Ÿå¿ããè¡ãæã£ãŠããã§ãããã
+ åã
ã®æ°žç¶ã³ã³ããã¹ãã®ãªãã§ã¯ãæ°žç¶IDã
+ Javaã®IDïŒãªããžã§ã¯ãã®ã¡ã¢ãªäžã®äœçœ®ïŒãšåãã§ããããšã
+ Hibernateã <emphasis>ä¿èšŒ</emphasis> ããŸãã
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>detached</term>
+ <listitem>
+ <para>
+ ãã®ç¶æ
ã®ã€ã³ã¹ã¿ã³ã¹ã¯ããã€ãŠæ°žç¶ã³ã³ããã¹ãã«é¢é£ã¥ãããããã
+ ãã®ã³ã³ããã¹ããã¯ããŒãºããããããããã¯ã
+ ä»ã®ããã»ã¹ã«ãã®ã€ã³ã¹ã¿ã³ã¹ãã·ãªã¢ã©ã€ãºããããã§ãã
+ ãã®ã€ã³ã¹ã¿ã³ã¹ã¯ãæ°žç¶IDãæã¡ããããŠãã¯ããŒã¿ããŒã¹ã«
+ 察å¿ããè¡ãæã£ãŠããã§ããããåé¢ã€ã³ã¹ã¿ã³ã¹ã«å¯ŸããŠã¯ã
+ æ°žç¶IDãšJavaã®IDãšã®é¢é£ã¯ãHibernateãä¿èšŒããŸããã
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect1>
+
+ <sect1 id="architecture-jmx" revision="1">
+ <title>JMXãšã®çµ±å</title>
+
+ <para>
+ JMXã¯Javaã³ã³ããŒãã³ã管çã®J2EEæšæºã§ãã
+ JMXæšæºãµãŒãã¹ãéããŠãHibernateã¯ç®¡çãããŸãã
+ ãã£ã¹ããªãã¥ãŒã·ã§ã³ã®äžã«
<literal>org.hibernate.jmx.HibernateService</literal> ãšãã
+ MBeanå®è£
ãçšæããŠããŸãã
+ </para>
+
+ <para>
+ JBoss ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒäžã«HibernateãJMXãµãŒãã¹ãšããŠãããã€ããæ¹æ³ã®äŸãšããŠã¯ã
+ JBoss ãŠãŒã¶ã¬ã€ããåç
§ããŠãã ããã JBoss ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã«ãããŠã
+ JMXã䜿ã£ãŠãããã€ãããšã次ã®ã¡ãªãããåŸãããŸãã
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ <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 ãããã€:</emphasis> éåžžã(EAR ãŸã㯠SAR
ãã¡ã€ã«ã«ããïŒJBoss ãµãŒãã¹
+ ãããã€ã¡ã³ããã£ã¹ã¯ãªãã¿ã䜿ã£ãŠãHibernate JMX ãµãŒãã¹ããããã€ããŸãã
+ ããã¯ãHibernateã® <literal>SessionFactory</literal>
ã®å
šãŠã®äžè¬çãªèšå®ãªãã·ã§ã³ã
+ ãµããŒãããŸãããããäŸç¶ãšããŠãããã€ã¡ã³ããã£ã¹ã¯ãªãã¿ã®ãªãã«ãã¹ãŠã®ãããã³ã°ãã¡ã€ã«ã®
+ ååãæããå¿
èŠããããŸãã
+ ããããªãã·ã§ã³ã®HARãããã€ã¡ã³ãã䜿ãããšã決ãããªãã
+ JBossã¯èªåçã«HARãã¡ã€ã«ã®ãªãã®å
šãŠã®ãããã³ã°ãã¡ã€ã«ãæ€åºããŸãã
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ ãããã®ãªãã·ã§ã³ã«ã€ããŠã®è©³çŽ°ãªæ
å ±ã¯ãJBossã¢ããªã±ãŒã·ã§ã³ãµãŒããŠãŒã¶ã¬ã€ãã
+ åèã«ããŠãã ããã
+ </para>
+
+ <para>
+ JMXãµãŒãã¹ãšããŠå©çšå¯èœãªä»ã®æ©èœã«ãHibernateå®è¡æçµ±èšæ
å ±ããããŸãã
+ <xref linkend="configuration-optional-statistics"/>
ãèŠãŠãã ããã
+ </para>
+ </sect1>
+
+ <sect1 id="architecture-jca" revision="1">
+ <title>JCA ãµããŒã</title>
+ <para>
+ Hibernate 㯠JCA ã³ãã¯ã¿ãšããŠãèšå®ã§ããŸãã詳现ã«ã€ããŠã¯ãWebãµã€ããèŠãŠãã ããã
+ Hibernate JCA ãµããŒãã¯ãä»ã®ãšããå®é𿮵éãšããŠèããããŠããããšã«æ³šæããŠãã ããã
+ </para>
+ </sect1>
+
+ <sect1 id="architecture-current-session" revision="2">
+ <title>ã³ã³ããã¹ãäžã®ã»ãã·ã§ã³</title>
+ <para>
+ Hibernate ã䜿ã£ãã¢ããªã±ãŒã·ã§ã³ã¯ãã»ãšãã©ããªãããã®åœ¢ã§"ã³ã³ããã¹ãäžã®"ã»ãã·ã§ã³ãå¿
èŠã«ãªããŸãã
+ ãã³ã³ããã¹ãäžã®ã»ãã·ã§ã³ãã¯ãç¹å®ã®ã³ã³ããã¹ãã®ã¹ã³ãŒãã®ãªãã§æå¹ãªã»ãã·ã§ã³ã®ããšã§ãã
+ ããããéåžžã¢ããªã±ãŒã·ã§ã³ããšã«ã³ã³ããã¹ããæ§æãããã®ã®å®çŸ©ã¯ç°ãªããŸãã
+ ããããç°ãªãè€æ°ã®ã³ã³ããã¹ãã¯ãçŸæç¹ã«å¯ŸããŠç°ãªãã¹ã³ãŒããå®çŸ©ããŸãã
+ ããŒãžã§ã³3.0ããåã® Hibernate ã§ã¯ãèªäœã® <literal>ThreadLocal</literal>
ããŒã¹ã®ãã³ã³ããã¹ãäžã®ã»ãã·ã§ã³ãã
+ å©çšãããã <literal>HibernateUtil</literal> ã®ãããªãã«ããŒã¯ã©ã¹ãå©çšãããã
+ proxy/interception ããŒã¹ã®ãã³ã³ããã¹ãäžã®ã»ãã·ã§ã³ããæäŸãã
+ ïŒSpring ã Pico ã®ãããªïŒãµãŒãããŒãã£ã®ãã¬ãŒã ã¯ãŒã¯ãå©çšãããã®ããããã§ããã
+ </para>
+
+ <para>
+ ããŒãžã§ã³ 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>
+ ããããããŒãžã§ã³ 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>
ã€ã³ã¿ãã§ãŒã¹ã®èŠçŽã«ã€ããŠã®
+ 詳现ãªå
容㯠Javadoc ãåç
§ããŠãã ããã
+ ããã«ã¯ã <literal>currentSession()</literal> ãšãã1ã€ã®ã¡ãœãããå®çŸ©ãããŠããã
+ ãã®å®è£
ã¯ãçŸåšã®ãã³ã³ããã¹ãäžã®ã»ãã·ã§ã³ãã远跡ããããšã«è²¬ä»»ãæã¡ãŸãã
+ ãã®ãŸãŸäœ¿ããããã«ãHibernateã¯ãã®ã€ã³ã¿ãã§ãŒã¹ã®å®è£
ã2ã€æäŸããŠããŸãã
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+
<literal>org.hibernate.context.JTASessionContext</literal> -
+ <literal>JTA</literal> ãã©ã³ã¶ã¯ã·ã§ã³ã«ãã£ãŠãçŸåšã®ã»ãã·ã§ã³ã远跡ããã
+ ã¹ã³ãŒããæ±ºããããŸãããã®åŠçã¯ãå€ãJTAã ãã®ã¢ãããŒããšãŸã£ããåãã§ãã
+ 詳现ã¯Javadocãåç
§ããŠãã ããã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+
<literal>org.hibernate.context.ThreadLocalSessionContext</literal> -
+ ã¹ã¬ããã®å®è¡ã«ãã£ãŠãçŸåšã®ã»ãã·ã§ã³ã远跡ãããŸãã
+ 詳现ã¯Javadocãåç
§ããŠãã ããã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+
<literal>org.hibernate.context.ManagedSessionContext</literal> -
+ ã¹ã¬ããã®å®è¡ã«ãã£ãŠãçŸåšã®ã»ãã·ã§ã³ã远跡ãããŸãã
+ ãããããã®ã¯ã©ã¹ã®staticã¡ãœããã§ <literal>Session</literal> ã€ã³ã¹ã¿ã³ã¹ã
+ ãã€ã³ã/ã¢ã³ãã€ã³ããã責任ã¯ããªãã«ãããŸãã
+ ããã¯æ±ºã㊠<literal>Session</literal> ããªãŒãã³ããã©ãã·ã¥ãã¯ããŒãºããŸããã
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ å§ãã®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>
èšå®ãã©ã¡ãŒã¿ã¯ã
+ <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>
+
+</chapter>
+
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-25
06:31:49 UTC (rev 14130)
+++
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/basic_mapping.xml 2007-10-25
07:54:59 UTC (rev 14131)
@@ -1,5 +1,5 @@
<?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">
+<!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>åºæ¬çãªO/Rãããã³ã°</title>
@@ -801,6 +801,20 @@
</para>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><literal>sequence-identity</literal></term>
+ <listitem>
+ <para>
+ a specialized sequence generation strategy which utilizes a
+ database sequence for the actual value generation, but combines
+ this with JDBC3 getGeneratedKeys to actually return the generated
+ identifier value as part of the insert statement execution. This
+ strategy is only known to be supported on Oracle 10g drivers
+ targetted for JDK 1.4. Note comments on these insert statements
+ are disabled due to a bug in the Oracle drivers.
+ </para>
+ </listitem>
+ </varlistentry>
</variablelist>
</para>
@@ -918,6 +932,173 @@
</sect3>
</sect2>
+
+ <sect2 id="mapping-declaration-id-enhanced">
+ <title>Enhanced identifier generators</title>
+
+ <para>
+ Starting with release 3.2.3, there are 2 new generators which represent a re-thinking
of 2 different
+ aspects of identifier generation. The first aspect is database portability; the
second is optimization
+ (not having to query the database for every request for a new identifier value).
These two new
+ generators are intended to take the place of some of the named generators described
above (starting
+ in 3.3.x); however, they are included in the current releases and can be referenced by
FQN.
+ </para>
+
+ <para>
+ The first of these new generators is
<literal>org.hibernate.id.enhanced.SequenceStyleGenerator</literal>
+ which is intended firstly as a replacement for the
<literal>sequence</literal> generator and secondly as
+ a better portability generator than <literal>native</literal> (because
<literal>native</literal>
+ (generally) chooses between <literal>identity</literal> and
<literal>sequence</literal> which have
+ largely different semantics which can cause subtle isssues in applications eyeing
portability).
+ <literal>org.hibernate.id.enhanced.SequenceStyleGenerator</literal>
however achieves portability in
+ a different manner. It chooses between using a table or a sequence in the database to
store its
+ incrementing values depending on the capabilities of the dialect being used. The
difference between this
+ and <literal>native</literal> is that table-based and sequence-based
storage have the same exact
+ semantic (in fact sequences are exactly what Hibernate tries to emmulate with its
table-based
+ generators). This generator has a number of configuration parameters:
+ <itemizedlist spacing="compact">
+ <listitem>
+ <para>
+ <literal>sequence_name</literal> (optional, defaults to
<literal>hibernate_sequence</literal>):
+ The name of the sequence (or table) to be used.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>initial_value</literal> (optional, defaults to
<literal>1</literal>): The initial
+ value to be retrieved from the sequence/table. In sequence creation terms, this is
analogous
+ to the clause typical named "STARTS WITH".
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>increment_size</literal> (optional, defaults to
<literal>1</literal>): The value by
+ which subsequent calls to the sequence/table should differ. In sequence creation
terms, this
+ is analogous to the clause typical named "INCREMENT BY".
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>force_table_use</literal> (optional, defaults to
<literal>false</literal>): Should
+ we force the use of a table as the backing structure even though the dialect might
support
+ sequence?
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>value_column</literal> (optional, defaults to
<literal>next_val</literal>): Only
+ relevant for table structures! The name of the column on the table which is used
to
+ hold the value.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>optimizer</literal> (optional, defaults to
<literal>none</literal>):
+ See <xref linkend="mapping-declaration-id-enhanced-optimizers"/>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ The second of these new generators is
<literal>org.hibernate.id.enhanced.TableGenerator</literal> which
+ is intended firstly as a replacement for the <literal>table</literal>
generator (although it actually
+ functions much more like
<literal>org.hibernate.id.MultipleHiLoPerTableGenerator</literal>) and
secondly
+ as a re-implementation of
<literal>org.hibernate.id.MultipleHiLoPerTableGenerator</literal> utilizing
the
+ notion of pluggable optimiziers. Essentially this generator defines a table capable
of holding
+ a number of different increment values simultaneously by using multiple distinctly
keyed rows. This
+ generator has a number of configuration parameters:
+ <itemizedlist spacing="compact">
+ <listitem>
+ <para>
+ <literal>table_name</literal> (optional, defaults to
<literal>hibernate_sequences</literal>):
+ The name of the table to be used.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>value_column_name</literal> (optional, defaults to
<literal>next_val</literal>):
+ The name of the column on the table which is used to hold the value.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>segment_column_name</literal> (optional, defaults to
<literal>sequence_name</literal>):
+ The name of the column on the table which is used to hold the "segement
key". This is the
+ value which distinctly identifies which increment value to use.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>segment_value</literal> (optional, defaults to
<literal>default</literal>):
+ The "segment key" value for the segment from which we want to pull
increment values for
+ this generator.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>segment_value_length</literal> (optional, defaults to
<literal>255</literal>):
+ Used for schema generation; the column size to create this segment key column.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>initial_value</literal> (optional, defaults to
<literal>1</literal>):
+ The initial value to be retrieved from the table.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>increment_size</literal> (optional, defaults to
<literal>1</literal>):
+ The value by which subsequent calls to the table should differ.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>optimizer</literal> (optional, defaults to
<literal></literal>):
+ See <xref linkend="mapping-declaration-id-enhanced-optimizers"/>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </sect2>
+
+ <sect2 id="mapping-declaration-id-enhanced-optimizers">
+ <title>Identifier generator optimization</title>
+ <para>
+ For identifier generators which store values in the database, it is inefficient for
them to hit the
+ database on each and every call to generate a new identifier value. Instead,
you'd ideally want to
+ group a bunch of them in memory and only hit the database when you have exhausted your
in-memory
+ value group. This is the role of the pluggable optimizers. Currently only the two
enhanced generators
+ (<xref linkend="mapping-declaration-id-enhanced"/> support this
notion.
+ <itemizedlist spacing="compact">
+ <listitem>
+ <para>
+ <literal>none</literal> (generally this is the default if no optimizer
was specified): This
+ says to not perform any optimizations, and hit the database each and every
request.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>hilo</literal>: applies a hi/lo algorithm around the database
retrieved values. The
+ values from the database for this optimizer are expected to be sequential. The
values
+ retrieved from the database structure for this optimizer indicates the "group
number"; the
+ <literal>increment_size</literal> is multiplied by that value in memory
to define a group
+ "hi value".
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>pooled</literal>: like was discussed for
<literal>hilo</literal>, this optimizers
+ attempts to minimize the number of hits to the database. Here, however, we simply
store
+ the starting value for the "next group" into the database structure
rather than a sequential
+ value in combination with an in-memory grouping algorithm.
<literal>increment_size</literal>
+ here refers to the values coming from the database.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </sect2>
+
<sect2 id="mapping-declaration-compositeid"
revision="3">
<title>composite-id</title>
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-25
06:31:49 UTC (rev 14130)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/batch.xml 2007-10-25
07:54:59 UTC (rev 14131)
@@ -1,388 +1,392 @@
<?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>ãããåŠç</title>
-
- <para>
- Hibernateã䜿ã£ãŠããŒã¿ããŒã¹ã«100,000è¡ãæ¿å
¥ããæçŽãªæ¹æ³ã¯ããã®ãããªãã®ã§ãïŒ
- </para>
-
-<programlisting><![CDATA[Session session = sessionFactory.openSession();
-Transaction tx = session.beginTransaction();
-for ( int i=0; i<100000; i++ ) {
- Customer customer = new Customer(.....);
- session.save(customer);
-}
-tx.commit();
-session.close();]]></programlisting>
-
- <para>
- ããã¯50,000çªç®ã®è¡ã®ãããã§ <literal>OutOfMemoryException</literal>
ã§å€±æããã§ãããã
- Hibernateãã»ãã·ã§ã³ã¬ãã«ãã£ãã·ã¥ã§ã
- æ°ããæ¿å
¥ããããã¹ãŠã® <literal>Customer</literal>
- ã€ã³ã¹ã¿ã³ã¹ããã£ãã·ã¥ããããã§ãã
- </para>
-
- <para>
- ãã®ç« ã§ã¯ããã®åé¡ãåé¿ããæ¹æ³ã玹ä»ããŸãã
- ããããããåŠçããããªããJDBCãããã䜿çšå¯èœã§ããããšãéåžžã«éèŠã§ãã
- ããã§ãªããã°æé ãªããã©ãŒãã³ã¹ãåŸãããŸããã
- JDBCããããµã€ãºãæé ãªæ°å€ïŒäŸãã°ã10ãã50ïŒã«èšå®ããŠãã ããïŒ
- </para>
-
-<programlisting><![CDATA[hibernate.jdbc.batch_size
20]]></programlisting>
-
- <para>
- ãŸãäºæ¬¡ãã£ãã·ã¥ãå
šãå¹ããªãããã»ã¹ã§ã
- ãã®ãããªäœæ¥ãããããšæããããããŸããïŒ
- </para>
-
-<programlisting><![CDATA[hibernate.cache.use_second_level_cache
false]]></programlisting>
-
- <para>
- ããããããã¯çµ¶å¯Ÿã«å¿
èŠãšããããã§ã¯ãããŸããã
- ãªããªãæç€ºçã« <literal>CacheMode</literal> ãèšå®ããŠã
- äºæ¬¡ãã£ãã·ã¥ãšã®çžäºäœçšãç¡å¹ã«ããããšãã§ããããã§ãã
-
- </para>
-
- <sect1 id="batch-inserts">
- <title>ãããæ¿å
¥</title>
-
- <para>
- æ°ãããªããžã§ã¯ããæ°žç¶åãããšããäžæ¬¡ãã£ãã·ã¥ã®ãµã€ãºãå¶éããããã
- ã»ãã·ã§ã³ã <literal>flush()</literal> ããŠ
<literal>clear()</literal>
- ããªããã°ãªããŸããã
- </para>
-
-<programlisting><![CDATA[Session session = sessionFactory.openSession();
-Transaction tx = session.beginTransaction();
-
-for ( int i=0; i<100000; i++ ) {
- Customer customer = new Customer(.....);
- session.save(customer);
- if ( i % 20 == 0 ) { //20, same as the JDBC batch size
- //flush a batch of inserts and release memory:
- session.flush();
- session.clear();
- }
-}
-
-tx.commit();
-session.close();]]></programlisting>
-
- </sect1>
-
- <sect1 id="batch-update" >
- <title>ãããæŽæ°</title>
-
- <para>
- ããŒã¿ã埩å
ãããæŽæ°ãããããã«ã¯åãã¢ã€ãã£ã¢ãé©çšããŸãã
- ããã«å ããŠãããŒã¿ã®è¡ãå€ãè¿ãã¯ãšãªã«å¯ŸããŠæå¹ãª
- ãµãŒããŒãµã€ãã®ã«ãŒãœã«ã®å©ç¹ãçãããããã°
- <literal>scroll()</literal> ã䜿ãå¿
èŠããããŸãã
- </para>
-
-<programlisting><![CDATA[Session session = sessionFactory.openSession();
-Transaction tx = session.beginTransaction();
-
-ScrollableResults customers = session.getNamedQuery("GetCustomers")
- .setCacheMode(CacheMode.IGNORE)
- .scroll(ScrollMode.FORWARD_ONLY);
-int count=0;
-while ( customers.next() ) {
- Customer customer = (Customer) customers.get(0);
- customer.updateStuff(...);
- if ( ++count % 20 == 0 ) {
- //flush a batch of updates and release memory:
- session.flush();
- session.clear();
- }
-}
-
-tx.commit();
-session.close();]]></programlisting>
-
- </sect1>
-
- <sect1 id="batch-statelesssession">
- <title>
- StatelessSessionã€ã³ã¿ãŒãã§ã€ã¹
- </title>
-
- <para>
- ãŸãå¥ã®æ¹æ³ãšããŠãHibernateã¯ã³ãã³ãæåã®APIãçšæããŠããŸãã
- ããã¯åé¢ãªããžã§ã¯ãã®åœ¢ã§ã
- ããŒã¿ããŒã¹ãšã®ããŒã¿ã¹ããªãŒã ã®ããåãã«äœ¿ãããšãã§ããŸãã
- <literal>StatelessSession</literal> ã¯é¢é£ããæ°žç¶ã³ã³ããã¹ããæããã
- é«ã¬ãã«ã®ã©ã€ããµã€ã¯ã«ã»ãã³ãã£ã¯ã¹ã®å€ããæäŸããŸããã
- ç¹ã«ã¹ããŒãã¬ã¹ã»ãã·ã§ã³ã¯ãäžæãã£ãã·ã¥ãå®è£
ããã
- ãŸãã©ã®ãããªäºæ¬¡ãã£ãã·ã¥ãã¯ãšãªãã£ãã·ã¥ãšãçžäºäœçšããŸããã
- ãã©ã³ã¶ã¯ã·ã§ãã«ãªwrite-behindãèªåããŒãã£ãã§ãã¯ãå®è£
ããŸããã
- ã¹ããŒãã¬ã¹ã»ãã·ã§ã³ã䜿ã£ãŠè¡ãããæäœãã
- é¢é£ããã€ã³ã¹ã¿ã³ã¹ãžã«ã¹ã±ãŒããããããšã¯æ±ºããŠãããŸããã
- ã³ã¬ã¯ã·ã§ã³ã¯ãã¹ããŒãã¬ã¹ã»ãã·ã§ã³ããã¯ç¡èŠãããŸãã
- ã¹ããŒãã¬ã¹ã»ãã·ã§ã³ãéããŠè¡ãããæäœã¯ã
- Hibernateã®ã€ãã³ãã¢ãã«ãã€ã³ã¿ãŒã»ãã¿ã®åœ±é¿ãåããŸããã
- äžæãã£ãã·ã¥ãæããªãããã
- ã¹ããŒãã¬ã¹ã»ãã·ã§ã³ã¯å¥åãæã€ããŒã¿ã«äžæã察åŠã§ããŸããã
- ã¹ããŒãã¬ã¹ã»ãã·ã§ã³ã¯äœã¬ãã«ã®æœè±¡åã§ãããJDBCã«éåžžã«ãã䌌ãŠããŸãã
-
- </para>
-
-<programlisting><![CDATA[StatelessSession session =
sessionFactory.openStatelessSession();
-Transaction tx = session.beginTransaction();
-
-ScrollableResults customers = session.getNamedQuery("GetCustomers")
- .scroll(ScrollMode.FORWARD_ONLY);
-while ( customers.next() ) {
- Customer customer = (Customer) customers.get(0);
- customer.updateStuff(...);
- session.update(customer);
-}
-
-tx.commit();
-session.close();]]></programlisting>
-
- <para>
- ãã®ã³ãŒãäŸã§ã¯ãã¯ãšãªãè¿ã <literal>Customer</literal>
- ã€ã³ã¹ã¿ã³ã¹ã¯å³åº§ã«ïŒã»ãã·ã§ã³ããïŒåé¢ãããããšã«æ³šæããŠãã ããã
- ããã¯ãã©ã®ãããªæ°žç¶ã³ã³ããã¹ããšã決ããŠé¢é£ããŸããã
-
- </para>
-
- <para>
- <literal>StatelessSession</literal> ã€ã³ã¿ãŒãã§ã€ã¹ã§å®çŸ©ãããŠãã
- <literal>insert(), update(), delete()</literal> ã¯ã
- äœã¬ãã«ã®çŽæ¥çãªããŒã¿ããŒã¹æäœãšèããããŸãã
- çµæãšããŠãSQLã® <literal>INSERT, UPDATE, DELETE</literal>
ãããããå³åº§ã«å®è¡ãããŸãã
- ãã®ããã«ãããã㯠<literal>Session</literal> ã€ã³ã¿ãŒãã§ã€ã¹ã§å®çŸ©ãããŠãã
- <literal>save(), saveOrUpdate(), delete()</literal>
- ãšã¯éåžžã«ç°ãªãæå³ãæã¡ãŸãã
-
- </para>
-
- </sect1>
-
- <sect1 id="batch-direct" revision="3">
- <title>
- DMLã¹ã¿ã€ã«ã®æäœ
- </title>
-
- <para>
- ãã§ã«è°è«ããããã«ãèªåçãã€ééçãªãªããžã§ã¯ã/ãªã¬ãŒã·ã§ãã«ãããã³ã°ã¯ã
- ãªããžã§ã¯ãã®ç¶æ
ã®ç®¡çã§ãããšèããããŸãã
- ããã¯ã¡ã¢ãªå
ã®ãªããžã§ã¯ãã®ç¶æ
ãå©çšã§ãããšããããšã§ãã
- ãã®ããïŒSQLã® <literal>ããŒã¿æäœèšèª</literal> (DML) æïŒ
- <literal>INSERT</literal>, <literal>UPDATE</literal>,
<literal>DELETE</literal>
- ã䜿ã£ãŠïŒããŒã¿ããŒã¹å
ã®ããŒã¿ãçŽæ¥æäœããŠãã
- ã¡ã¢ãªå
ã®ç¶æ
ã«ã¯åœ±é¿ãäžããŸããã
- ãããHibernateã¯ããã«ã¯SQLã¹ã¿ã€ã«ã®DMLæå®è¡ã«å¯Ÿå¿ããã¡ãœãããçšæããŠããŸãã
- ããã¯Hibernateã¯ãšãªèšèªïŒ<xref linkend="queryhql">HQL</xref>ïŒ
- ãéããŠå®è¡ãããŸãã
-
- </para>
-
- <para>
- <literal>UPDATE</literal> ãš <literal>DELETE</literal>
æã®çäŒŒæ§æã¯ïŒ
- <literal>( UPDATE | DELETE ) FROM? ãšã³ãã£ãã£å (WHERE æ¡ä»¶ç¯)?</literal>
ã§ãã
- 泚æãã¹ãç¹ãããã€ããããŸãïŒ
-
- </para>
-
- <itemizedlist spacing="compact">
- <listitem>
- <para>
- fromç¯ã«ãããŠãFROMããŒã¯ãŒãã¯ãªãã·ã§ã³ã§ãã
- </para>
- </listitem>
- <listitem>
- <para>
- fromç¯ã§ã¯åäžã®ãšã³ãã£ãã£åã ããå¯èœã§ã
- ä»»æã§å¥åãä»ããããšãã§ããŸãã
- ãšã³ãã£ãã£åã«å¥åãäžãããããšãã©ã®ãããªããããã£åç
§ãã
- ãã®å¥åã䜿ã£ãŠä¿®é£Ÿããªããã°ãªããŸããã
- ãããšã³ãã£ãã£åã«å¥åãäžããããªããã°ã
- ã©ã®ãããªããããã£åç
§ã修食ããŠã¯ãªããŸããã
-
- </para>
- </listitem>
- <listitem>
- <para>
- ïŒæé»çã§ããæç€ºçã§ããïŒ<xref
linkend="queryhql-joins-forms">çµå</xref>
- ããã«ã¯HQLã¯ãšãªå
ã§æå®ããããšã¯ã§ããŸããã
- ãµãã¯ãšãªã¯whereç¯ã§äœ¿ãããšãã§ããŸã
- ãµãã¯ãšãªãã®ãã®ã¯ãçµåãå«ããããŸãã
-
- </para>
- </listitem>
- <listitem>
- <para>
- whereç¯ã¯ãªãã·ã§ã³ã§ãã
- </para>
- </listitem>
- </itemizedlist>
-
- <para>
- äŸãšããŠãHQLã® <literal>UPDATE</literal> ãå®è¡ããã«ã¯ã
- <literal>Query.executeUpdate()</literal> ã¡ãœããã䜿ã£ãŠãã ããã
- ïŒãã®ã¡ãœããã¯ããªãã¿ã®JDBC
<literal>PreparedStatement.executeUpdate()</literal>
- ããåä»ããããŸããïŒïŒ
- d
- </para>
-
-<programlisting><![CDATA[Session session = sessionFactory.openSession();
-Transaction tx = session.beginTransaction();
-
-String hqlUpdate = "update Customer c set c.name = :newName where c.name =
:oldName";
-// or String hqlUpdate = "update Customer set name = :newName where name =
:oldName";
-int updatedEntities = s.createQuery( hqlUpdate )
- .setString( "newName", newName )
- .setString( "oldName", oldName )
- .executeUpdate();
-tx.commit();
-session.close();]]></programlisting>
-
- <para>
- HQLã® <literal>UPDATE</literal> æã¯ãããã©ã«ãã§ã¯ãäœçšãããšã³ãã£ãã£ã®
- <xref
linkend="mapping-declaration-version">version</xref> ã
- <xref
linkend="mapping-declaration-timestamp">timestamp</xref>
- ããããã£ã®å€ã«ã¯åœ±é¿ããŸããã
- ããã¯EJB3ã®ä»æ§ã«ãåãç¶ãããŠããŸãã
- ããã <literal>versioned update</literal> ã䜿ã£ãŠã
- <literal>version</literal> ã
<literal>timestamp</literal>
- ããããã£ã®å€ã匷å¶çã«ãªã»ãããããããšãã§ããŸãã
- ãã㯠<literal>UPDATE</literal> ããŒã¯ãŒãã®åŸã«
<literal>VERSIONED</literal>
- ããŒã¯ãŒãã远å ããããšã§è¡ããŸãã
-
- </para>
-<programlisting><![CDATA[Session session = sessionFactory.openSession();
-Transaction tx = session.beginTransaction();
-String hqlVersionedUpdate = "update versioned Customer set name = :newName where
name = :oldName";
-int updatedEntities = s.createQuery( hqlUpdate )
- .setString( "newName", newName )
- .setString( "oldName", oldName )
- .executeUpdate();
-tx.commit();
-session.close();]]></programlisting>
-
- <para>
-
ã«ã¹ã¿ã ããŒãžã§ã³åïŒ<literal>org.hibernate.usertype.UserVersionType</literal>ïŒ
- 㯠<literal>update versioned</literal> æãšäžç·ã«äœ¿ããªãããšã«æ³šæããŠãã ããã
- </para>
-
- <para>
- HQLã® <literal>DELETE</literal> ãå®è¡ããã«ã¯ã
- åã <literal>Query.executeUpdate()</literal> ã¡ãœããã䜿ã£ãŠãã ããïŒ
-
- </para>
-
-<programlisting><![CDATA[Session session = sessionFactory.openSession();
-Transaction tx = session.beginTransaction();
-
-String hqlDelete = "delete Customer c where c.name = :oldName";
-// or String hqlDelete = "delete Customer where name = :oldName";
-int deletedEntities = s.createQuery( hqlDelete )
- .setString( "oldName", oldName )
- .executeUpdate();
-tx.commit();
-session.close();]]></programlisting>
-
- <para>
- <literal>Query.executeUpdate()</literal> ã¡ãœãããè¿ã
<literal>int</literal>
- ã®å€ã¯ããã®æäœã圱é¿ãåãŒãããšã³ãã£ãã£ã®æ°ã§ãã
- ããã圱é¿ããããŒã¿ããŒã¹å
ã®è¡æ°ãšãçžäºã«é¢ä¿ãããã©ãããèããŠã¿ãŠãã ããã
- HQLãã«ã¯æäœã¯ãçµæãšããŠãå®éã®SQLæãè€æ°å®è¡ãããããšã«ãªããŸãã
- äŸãã°joined-subclassã§ãã
- è¿ãããæ°ã¯ããã®æã«ãã£ãŠåœ±é¿ãããå®éã®ãšã³ãã£ãã£ã®æ°ã瀺ããŸãã
- joined-subclassã®äŸã«æ»ããšããµãã¯ã©ã¹ã®äžã€ã«å¯Ÿããåé€ã¯ã
- ãã®ãµãã¯ã©ã¹ããããã³ã°ãããããŒãã«ã ãã§ã¯ãªãã
- ãã«ãŒããããŒãã«ãšç¶æ¿éå±€ãããã«äžã£ãjoined-subclassã®ããŒãã«ã®åé€ã«ãªããŸãã
- </para>
-
- <para>
- <literal>INSERT</literal> æã®çäŒŒæ§æã¯ïŒ
- <literal>INSERT INTO ãšã³ãã£ãã£å ããããã£ãªã¹ã selectæ</literal> ã§ãã
- 泚æãã¹ãç¹ãããã€ããããŸãïŒ
-
- </para>
-
- <itemizedlist spacing="compact">
- <listitem>
- <para>
- INSERT INTO ... SELECT ... ã®åœ¢åŒã ãããµããŒããããŠããŸãã
- INSERT INTO ... VALUES ... ã®åœ¢åŒã¯ãµããŒããããŠããŸããã
- </para>
- <para>
- ããããã£ãªã¹ãã¯ãSQLã® <literal>INSERT</literal> æã«ããã
<literal>ã«ã©ã ã®ä»æ§</literal>
- ã«é¡äŒŒããŠããŸãã
- ç¶æ¿ã®ãããã³ã°ã«å«ãŸãããšã³ãã£ãã£ã«å¯ŸããŠã
- ã¯ã©ã¹ã¬ãã«ã§çŽæ¥å®çŸ©ãããããããã£ã ãããããããã£ãªã¹ãã«äœ¿ããŸãã
- ã¹ãŒããŒã¯ã©ã¹ã®ããããã£ã¯èªããããããµãã¯ã©ã¹ã®ããããã£ã¯å¹æããããŸããã
- èšãæãããš <literal>INSERT</literal> æã¯ãæ¬è³ªçã«ããªã¢ãŒãã£ãã¯ã§ã¯ãããŸããã
-
- </para>
- </listitem>
- <listitem>
- <para>
- 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>
- ãšããŠå®çŸ©ãããããããã£ã®éã®ãã¹ãããã®åé¡ãåŒãèµ·ãããŸãã
- ããŒã¿ããŒã¹ãããããåºå¥ã§ããªããŠãã倿ããããšãã§ããŠãããã®åé¡ã¯çºçããŸãã
- </para>
- </listitem>
- <listitem>
- <para>
- 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> ãšããŠãããã³ã°ãããããããã£ã«å¯ŸããŠã
- insertæã«ã¯äºã€ã®éžæè¢ããããŸãã
- ããããã£ãªã¹ãã§æç€ºçã«ããããã£ãæå®ããã
- ïŒãã®å Žåã察å¿ããselectåŒããå€ãåãããŸãïŒã
- ããããã£ãªã¹ãããé€å€ããã
- ïŒãã®å Žåã<literal>org.hibernate.type.VersionType</literal>
ã§å®çŸ©ããã
- <literal>ã·ãŒãå€</literal> ã䜿ãããŸãïŒã®ããããã§ãã
-
- </para>
- </listitem>
- </itemizedlist>
-
- <para>
- HQLã® <literal>INSERT</literal> æã®å®è¡äŸã§ãïŒ
-
- </para>
-
-<programlisting><![CDATA[Session session = sessionFactory.openSession();
-Transaction tx = session.beginTransaction();
-
-String hqlInsert = "insert into DelinquentAccount (id, name) select c.id, c.name
from Customer c where ...";
-int createdEntities = s.createQuery( hqlInsert )
- .executeUpdate();
-tx.commit();
-session.close();]]></programlisting>
-
- </sect1>
-
-</chapter>
+
+<chapter id="batch">
+ <title>ãããåŠç</title>
+
+ <para>
+ Hibernateã䜿ã£ãŠããŒã¿ããŒã¹ã«100,000è¡ãæ¿å
¥ããæçŽãªæ¹æ³ã¯ããã®ãããªãã®ã§ãïŒ
+ </para>
+
+<programlisting><![CDATA[Session session = sessionFactory.openSession();
+Transaction tx = session.beginTransaction();
+for ( int i=0; i<100000; i++ ) {
+ Customer customer = new Customer(.....);
+ session.save(customer);
+}
+tx.commit();
+session.close();]]></programlisting>
+
+ <para>
+ ããã¯50,000çªç®ã®è¡ã®ãããã§ <literal>OutOfMemoryException</literal>
ã§å€±æããã§ãããã
+ Hibernateãã»ãã·ã§ã³ã¬ãã«ãã£ãã·ã¥ã§ã
+ æ°ããæ¿å
¥ããããã¹ãŠã® <literal>Customer</literal>
+ ã€ã³ã¹ã¿ã³ã¹ããã£ãã·ã¥ããããã§ãã
+ </para>
+
+ <para>
+ ãã®ç« ã§ã¯ããã®åé¡ãåé¿ããæ¹æ³ã玹ä»ããŸãã
+ ããããããåŠçããããªããJDBCãããã䜿çšå¯èœã§ããããšãéåžžã«éèŠã§ãã
+ ããã§ãªããã°æé ãªããã©ãŒãã³ã¹ãåŸãããŸããã
+ JDBCããããµã€ãºãæé ãªæ°å€ïŒäŸãã°ã10ãã50ïŒã«èšå®ããŠãã ããïŒ
+ </para>
+
+<programlisting><![CDATA[hibernate.jdbc.batch_size
20]]></programlisting>
+<para id="disablebatching" revision="1">
+ Note that Hibernate disables insert batching at the JDBC level transparently if you
+ use an <literal>identiy</literal> identifier generator.
+</para>
+
+ <para>
+ ãŸãäºæ¬¡ãã£ãã·ã¥ãå
šãå¹ããªãããã»ã¹ã§ã
+ ãã®ãããªäœæ¥ãããããšæããããããŸããïŒ
+ </para>
+
+<programlisting><![CDATA[hibernate.cache.use_second_level_cache
false]]></programlisting>
+
+ <para>
+ ããããããã¯çµ¶å¯Ÿã«å¿
èŠãšããããã§ã¯ãããŸããã
+ ãªããªãæç€ºçã« <literal>CacheMode</literal> ãèšå®ããŠã
+ äºæ¬¡ãã£ãã·ã¥ãšã®çžäºäœçšãç¡å¹ã«ããããšãã§ããããã§ãã
+
+ </para>
+
+ <sect1 id="batch-inserts">
+ <title>ãããæ¿å
¥</title>
+
+ <para>
+ æ°ãããªããžã§ã¯ããæ°žç¶åãããšããäžæ¬¡ãã£ãã·ã¥ã®ãµã€ãºãå¶éããããã
+ ã»ãã·ã§ã³ã <literal>flush()</literal> ããŠ
<literal>clear()</literal>
+ ããªããã°ãªããŸããã
+ </para>
+
+<programlisting><![CDATA[Session session = sessionFactory.openSession();
+Transaction tx = session.beginTransaction();
+
+for ( int i=0; i<100000; i++ ) {
+ Customer customer = new Customer(.....);
+ session.save(customer);
+ if ( i % 20 == 0 ) { //20, same as the JDBC batch size
+ //flush a batch of inserts and release memory:
+ session.flush();
+ session.clear();
+ }
+}
+
+tx.commit();
+session.close();]]></programlisting>
+
+ </sect1>
+
+ <sect1 id="batch-update" >
+ <title>ãããæŽæ°</title>
+
+ <para>
+ ããŒã¿ã埩å
ãããæŽæ°ãããããã«ã¯åãã¢ã€ãã£ã¢ãé©çšããŸãã
+ ããã«å ããŠãããŒã¿ã®è¡ãå€ãè¿ãã¯ãšãªã«å¯ŸããŠæå¹ãª
+ ãµãŒããŒãµã€ãã®ã«ãŒãœã«ã®å©ç¹ãçãããããã°
+ <literal>scroll()</literal> ã䜿ãå¿
èŠããããŸãã
+ </para>
+
+<programlisting><![CDATA[Session session = sessionFactory.openSession();
+Transaction tx = session.beginTransaction();
+
+ScrollableResults customers = session.getNamedQuery("GetCustomers")
+ .setCacheMode(CacheMode.IGNORE)
+ .scroll(ScrollMode.FORWARD_ONLY);
+int count=0;
+while ( customers.next() ) {
+ Customer customer = (Customer) customers.get(0);
+ customer.updateStuff(...);
+ if ( ++count % 20 == 0 ) {
+ //flush a batch of updates and release memory:
+ session.flush();
+ session.clear();
+ }
+}
+
+tx.commit();
+session.close();]]></programlisting>
+
+ </sect1>
+
+ <sect1 id="batch-statelesssession">
+ <title>
+ StatelessSessionã€ã³ã¿ãŒãã§ã€ã¹
+ </title>
+
+ <para>
+ ãŸãå¥ã®æ¹æ³ãšããŠãHibernateã¯ã³ãã³ãæåã®APIãçšæããŠããŸãã
+ ããã¯åé¢ãªããžã§ã¯ãã®åœ¢ã§ã
+ ããŒã¿ããŒã¹ãšã®ããŒã¿ã¹ããªãŒã ã®ããåãã«äœ¿ãããšãã§ããŸãã
+ <literal>StatelessSession</literal> ã¯é¢é£ããæ°žç¶ã³ã³ããã¹ããæããã
+ é«ã¬ãã«ã®ã©ã€ããµã€ã¯ã«ã»ãã³ãã£ã¯ã¹ã®å€ããæäŸããŸããã
+ ç¹ã«ã¹ããŒãã¬ã¹ã»ãã·ã§ã³ã¯ãäžæãã£ãã·ã¥ãå®è£
ããã
+ ãŸãã©ã®ãããªäºæ¬¡ãã£ãã·ã¥ãã¯ãšãªãã£ãã·ã¥ãšãçžäºäœçšããŸããã
+ ãã©ã³ã¶ã¯ã·ã§ãã«ãªwrite-behindãèªåããŒãã£ãã§ãã¯ãå®è£
ããŸããã
+ ã¹ããŒãã¬ã¹ã»ãã·ã§ã³ã䜿ã£ãŠè¡ãããæäœãã
+ é¢é£ããã€ã³ã¹ã¿ã³ã¹ãžã«ã¹ã±ãŒããããããšã¯æ±ºããŠãããŸããã
+ ã³ã¬ã¯ã·ã§ã³ã¯ãã¹ããŒãã¬ã¹ã»ãã·ã§ã³ããã¯ç¡èŠãããŸãã
+ ã¹ããŒãã¬ã¹ã»ãã·ã§ã³ãéããŠè¡ãããæäœã¯ã
+ Hibernateã®ã€ãã³ãã¢ãã«ãã€ã³ã¿ãŒã»ãã¿ã®åœ±é¿ãåããŸããã
+ äžæãã£ãã·ã¥ãæããªãããã
+ ã¹ããŒãã¬ã¹ã»ãã·ã§ã³ã¯å¥åãæã€ããŒã¿ã«äžæã察åŠã§ããŸããã
+ ã¹ããŒãã¬ã¹ã»ãã·ã§ã³ã¯äœã¬ãã«ã®æœè±¡åã§ãããJDBCã«éåžžã«ãã䌌ãŠããŸãã
+
+ </para>
+
+<programlisting><![CDATA[StatelessSession session =
sessionFactory.openStatelessSession();
+Transaction tx = session.beginTransaction();
+
+ScrollableResults customers = session.getNamedQuery("GetCustomers")
+ .scroll(ScrollMode.FORWARD_ONLY);
+while ( customers.next() ) {
+ Customer customer = (Customer) customers.get(0);
+ customer.updateStuff(...);
+ session.update(customer);
+}
+
+tx.commit();
+session.close();]]></programlisting>
+
+ <para>
+ ãã®ã³ãŒãäŸã§ã¯ãã¯ãšãªãè¿ã <literal>Customer</literal>
+ ã€ã³ã¹ã¿ã³ã¹ã¯å³åº§ã«ïŒã»ãã·ã§ã³ããïŒåé¢ãããããšã«æ³šæããŠãã ããã
+ ããã¯ãã©ã®ãããªæ°žç¶ã³ã³ããã¹ããšã決ããŠé¢é£ããŸããã
+
+ </para>
+
+ <para>
+ <literal>StatelessSession</literal> ã€ã³ã¿ãŒãã§ã€ã¹ã§å®çŸ©ãããŠãã
+ <literal>insert(), update(), delete()</literal> ã¯ã
+ äœã¬ãã«ã®çŽæ¥çãªããŒã¿ããŒã¹æäœãšèããããŸãã
+ çµæãšããŠãSQLã® <literal>INSERT, UPDATE, DELETE</literal>
ãããããå³åº§ã«å®è¡ãããŸãã
+ ãã®ããã«ãããã㯠<literal>Session</literal> ã€ã³ã¿ãŒãã§ã€ã¹ã§å®çŸ©ãããŠãã
+ <literal>save(), saveOrUpdate(), delete()</literal>
+ ãšã¯éåžžã«ç°ãªãæå³ãæã¡ãŸãã
+
+ </para>
+
+ </sect1>
+
+ <sect1 id="batch-direct" revision="3">
+ <title>
+ DMLã¹ã¿ã€ã«ã®æäœ
+ </title>
+
+ <para>
+ ãã§ã«è°è«ããããã«ãèªåçãã€ééçãªãªããžã§ã¯ã/ãªã¬ãŒã·ã§ãã«ãããã³ã°ã¯ã
+ ãªããžã§ã¯ãã®ç¶æ
ã®ç®¡çã§ãããšèããããŸãã
+ ããã¯ã¡ã¢ãªå
ã®ãªããžã§ã¯ãã®ç¶æ
ãå©çšã§ãããšããããšã§ãã
+ ãã®ããïŒSQLã® <literal>ããŒã¿æäœèšèª</literal> (DML) æïŒ
+ <literal>INSERT</literal>, <literal>UPDATE</literal>,
<literal>DELETE</literal>
+ ã䜿ã£ãŠïŒããŒã¿ããŒã¹å
ã®ããŒã¿ãçŽæ¥æäœããŠãã
+ ã¡ã¢ãªå
ã®ç¶æ
ã«ã¯åœ±é¿ãäžããŸããã
+ ãããHibernateã¯ããã«ã¯SQLã¹ã¿ã€ã«ã®DMLæå®è¡ã«å¯Ÿå¿ããã¡ãœãããçšæããŠããŸãã
+ ããã¯Hibernateã¯ãšãªèšèªïŒ<xref linkend="queryhql">HQL</xref>ïŒ
+ ãéããŠå®è¡ãããŸãã
+
+ </para>
+
+ <para>
+ <literal>UPDATE</literal> ãš <literal>DELETE</literal>
æã®çäŒŒæ§æã¯ïŒ
+ <literal>( UPDATE | DELETE ) FROM? ãšã³ãã£ãã£å (WHERE æ¡ä»¶ç¯)?</literal>
ã§ãã
+ 泚æãã¹ãç¹ãããã€ããããŸãïŒ
+
+ </para>
+
+ <itemizedlist spacing="compact">
+ <listitem>
+ <para>
+ fromç¯ã«ãããŠãFROMããŒã¯ãŒãã¯ãªãã·ã§ã³ã§ãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ fromç¯ã§ã¯åäžã®ãšã³ãã£ãã£åã ããå¯èœã§ã
+ ä»»æã§å¥åãä»ããããšãã§ããŸãã
+ ãšã³ãã£ãã£åã«å¥åãäžãããããšãã©ã®ãããªããããã£åç
§ãã
+ ãã®å¥åã䜿ã£ãŠä¿®é£Ÿããªããã°ãªããŸããã
+ ãããšã³ãã£ãã£åã«å¥åãäžããããªããã°ã
+ ã©ã®ãããªããããã£åç
§ã修食ããŠã¯ãªããŸããã
+
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ ïŒæé»çã§ããæç€ºçã§ããïŒ<xref
linkend="queryhql-joins-forms">çµå</xref>
+ ããã«ã¯HQLã¯ãšãªå
ã§æå®ããããšã¯ã§ããŸããã
+ ãµãã¯ãšãªã¯whereç¯ã§äœ¿ãããšãã§ããŸã
+ ãµãã¯ãšãªãã®ãã®ã¯ãçµåãå«ããããŸãã
+
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ whereç¯ã¯ãªãã·ã§ã³ã§ãã
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ äŸãšããŠãHQLã® <literal>UPDATE</literal> ãå®è¡ããã«ã¯ã
+ <literal>Query.executeUpdate()</literal> ã¡ãœããã䜿ã£ãŠãã ããã
+ ïŒãã®ã¡ãœããã¯ããªãã¿ã®JDBC
<literal>PreparedStatement.executeUpdate()</literal>
+ ããåä»ããããŸããïŒïŒ
+ d
+ </para>
+
+<programlisting><![CDATA[Session session = sessionFactory.openSession();
+Transaction tx = session.beginTransaction();
+
+String hqlUpdate = "update Customer c set c.name = :newName where c.name =
:oldName";
+// or String hqlUpdate = "update Customer set name = :newName where name =
:oldName";
+int updatedEntities = s.createQuery( hqlUpdate )
+ .setString( "newName", newName )
+ .setString( "oldName", oldName )
+ .executeUpdate();
+tx.commit();
+session.close();]]></programlisting>
+
+ <para>
+ HQLã® <literal>UPDATE</literal> æã¯ãããã©ã«ãã§ã¯ãäœçšãããšã³ãã£ãã£ã®
+ <xref
linkend="mapping-declaration-version">version</xref> ã
+ <xref
linkend="mapping-declaration-timestamp">timestamp</xref>
+ ããããã£ã®å€ã«ã¯åœ±é¿ããŸããã
+ ããã¯EJB3ã®ä»æ§ã«ãåãç¶ãããŠããŸãã
+ ããã <literal>versioned update</literal> ã䜿ã£ãŠã
+ <literal>version</literal> ã
<literal>timestamp</literal>
+ ããããã£ã®å€ã匷å¶çã«ãªã»ãããããããšãã§ããŸãã
+ ãã㯠<literal>UPDATE</literal> ããŒã¯ãŒãã®åŸã«
<literal>VERSIONED</literal>
+ ããŒã¯ãŒãã远å ããããšã§è¡ããŸãã
+
+ </para>
+<programlisting><![CDATA[Session session = sessionFactory.openSession();
+Transaction tx = session.beginTransaction();
+String hqlVersionedUpdate = "update versioned Customer set name = :newName where
name = :oldName";
+int updatedEntities = s.createQuery( hqlUpdate )
+ .setString( "newName", newName )
+ .setString( "oldName", oldName )
+ .executeUpdate();
+tx.commit();
+session.close();]]></programlisting>
+
+ <para>
+
ã«ã¹ã¿ã ããŒãžã§ã³åïŒ<literal>org.hibernate.usertype.UserVersionType</literal>ïŒ
+ 㯠<literal>update versioned</literal> æãšäžç·ã«äœ¿ããªãããšã«æ³šæããŠãã ããã
+ </para>
+
+ <para>
+ HQLã® <literal>DELETE</literal> ãå®è¡ããã«ã¯ã
+ åã <literal>Query.executeUpdate()</literal> ã¡ãœããã䜿ã£ãŠãã ããïŒ
+
+ </para>
+
+<programlisting><![CDATA[Session session = sessionFactory.openSession();
+Transaction tx = session.beginTransaction();
+
+String hqlDelete = "delete Customer c where c.name = :oldName";
+// or String hqlDelete = "delete Customer where name = :oldName";
+int deletedEntities = s.createQuery( hqlDelete )
+ .setString( "oldName", oldName )
+ .executeUpdate();
+tx.commit();
+session.close();]]></programlisting>
+
+ <para>
+ <literal>Query.executeUpdate()</literal> ã¡ãœãããè¿ã
<literal>int</literal>
+ ã®å€ã¯ããã®æäœã圱é¿ãåãŒãããšã³ãã£ãã£ã®æ°ã§ãã
+ ããã圱é¿ããããŒã¿ããŒã¹å
ã®è¡æ°ãšãçžäºã«é¢ä¿ãããã©ãããèããŠã¿ãŠãã ããã
+ HQLãã«ã¯æäœã¯ãçµæãšããŠãå®éã®SQLæãè€æ°å®è¡ãããããšã«ãªããŸãã
+ äŸãã°joined-subclassã§ãã
+ è¿ãããæ°ã¯ããã®æã«ãã£ãŠåœ±é¿ãããå®éã®ãšã³ãã£ãã£ã®æ°ã瀺ããŸãã
+ joined-subclassã®äŸã«æ»ããšããµãã¯ã©ã¹ã®äžã€ã«å¯Ÿããåé€ã¯ã
+ ãã®ãµãã¯ã©ã¹ããããã³ã°ãããããŒãã«ã ãã§ã¯ãªãã
+ ãã«ãŒããããŒãã«ãšç¶æ¿éå±€ãããã«äžã£ãjoined-subclassã®ããŒãã«ã®åé€ã«ãªããŸãã
+ </para>
+
+ <para>
+ <literal>INSERT</literal> æã®çäŒŒæ§æã¯ïŒ
+ <literal>INSERT INTO ãšã³ãã£ãã£å ããããã£ãªã¹ã selectæ</literal> ã§ãã
+ 泚æãã¹ãç¹ãããã€ããããŸãïŒ
+
+ </para>
+
+ <itemizedlist spacing="compact">
+ <listitem>
+ <para>
+ INSERT INTO ... SELECT ... ã®åœ¢åŒã ãããµããŒããããŠããŸãã
+ INSERT INTO ... VALUES ... ã®åœ¢åŒã¯ãµããŒããããŠããŸããã
+ </para>
+ <para>
+ ããããã£ãªã¹ãã¯ãSQLã® <literal>INSERT</literal> æã«ããã
<literal>ã«ã©ã ã®ä»æ§</literal>
+ ã«é¡äŒŒããŠããŸãã
+ ç¶æ¿ã®ãããã³ã°ã«å«ãŸãããšã³ãã£ãã£ã«å¯ŸããŠã
+ ã¯ã©ã¹ã¬ãã«ã§çŽæ¥å®çŸ©ãããããããã£ã ãããããããã£ãªã¹ãã«äœ¿ããŸãã
+ ã¹ãŒããŒã¯ã©ã¹ã®ããããã£ã¯èªããããããµãã¯ã©ã¹ã®ããããã£ã¯å¹æããããŸããã
+ èšãæãããš <literal>INSERT</literal> æã¯ãæ¬è³ªçã«ããªã¢ãŒãã£ãã¯ã§ã¯ãããŸããã
+
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 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>
+ ãšããŠå®çŸ©ãããããããã£ã®éã®ãã¹ãããã®åé¡ãåŒãèµ·ãããŸãã
+ ããŒã¿ããŒã¹ãããããåºå¥ã§ããªããŠãã倿ããããšãã§ããŠãããã®åé¡ã¯çºçããŸãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 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> ãšããŠãããã³ã°ãããããããã£ã«å¯ŸããŠã
+ insertæã«ã¯äºã€ã®éžæè¢ããããŸãã
+ ããããã£ãªã¹ãã§æç€ºçã«ããããã£ãæå®ããã
+ ïŒãã®å Žåã察å¿ããselectåŒããå€ãåãããŸãïŒã
+ ããããã£ãªã¹ãããé€å€ããã
+ ïŒãã®å Žåã<literal>org.hibernate.type.VersionType</literal>
ã§å®çŸ©ããã
+ <literal>ã·ãŒãå€</literal> ã䜿ãããŸãïŒã®ããããã§ãã
+
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ HQLã® <literal>INSERT</literal> æã®å®è¡äŸã§ãïŒ
+
+ </para>
+
+<programlisting><![CDATA[Session session = sessionFactory.openSession();
+Transaction tx = session.beginTransaction();
+
+String hqlInsert = "insert into DelinquentAccount (id, name) select c.id, c.name
from Customer c where ...";
+int createdEntities = s.createQuery( hqlInsert )
+ .executeUpdate();
+tx.commit();
+session.close();]]></programlisting>
+
+ </sect1>
+
+</chapter>
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-25
06:31:49 UTC (rev 14130)
+++
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/performance.xml 2007-10-25
07:54:59 UTC (rev 14131)
@@ -1,6 +1,6 @@
<?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">
-
+<!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>ããã©ãŒãã³ã¹ã®æ¹å</title>
@@ -681,7 +681,7 @@
<entry>OSCache</entry>
<entry><literal>org.hibernate.cache.OSCacheProvider</literal></entry>
<entry>ã¡ã¢ãªããã£ã¹ã¯</entry>
- <entry>yesïŒã¯ã©ã¹ã¿ç¡å¹åïŒ</entry>
+ <entry></entry>
<entry>yes</entry>
</row>
<row>
@@ -1377,4 +1377,4 @@
</sect1>
-</chapter>
+</chapter>
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-25
06:31:49 UTC (rev 14130)
+++
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/query_hql.xml 2007-10-25
07:54:59 UTC (rev 14131)
@@ -1,6 +1,6 @@
<?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">
-
+<!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>
@@ -211,6 +211,41 @@
<programlisting><![CDATA[from Cat as cat where cat.mate.name like
'%s%']]></programlisting>
</sect1>
+ <sect1 id="queryhql-identifier-property">
+ <title>Refering to identifier property</title>
+
+ <para>
+ There are, generally speaking, 2 ways to refer to an entity's identifier
property:
+ </para>
+ <itemizedlist spacing="compact">
+ <listitem>
+ <para>
+ The special property (lowercase) <literal>id</literal> may be used to
reference the identifier
+ property of an entity <emphasis>provided that entity does not define a
non-identifier property
+ named id</emphasis>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ If the entity defines a named identifier property, you may use that property
name.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ References to composite identifier properties follow the same naming rules. If
the
+ entity has a non-identifier property named id, the composite identifier property
can only
+ be referenced by its defined named; otherwise, the special
<literal>id</literal> property
+ can be used to rerference the identifier property.
+ </para>
+
+ <para>
+ Note: this has changed significantly starting in version 3.2.2. In previous
versions,
+ <literal>id</literal> <emphasis>always</emphasis> referred
to the identifier property no
+ matter what its actual name. A ramification of that decision was that
non-identifier
+ properties named <literal>id</literal> could never be referenced in
Hibernate queries.
+ </para>
+ </sect1>
<sect1 id="queryhql-select">
<title>Selectç¯</title>
@@ -846,9 +881,12 @@
order by count(kitten) asc, sum(kitten.weight) desc]]></programlisting>
<para>
- <literal>group by</literal> ç¯ã <literal>order
by</literal> ç¯ã«
- ç®è¡åŒãå«ãããšãã§ããªãããšã«æ³šæããŠãã ããã
- </para>
+ Note that neither the <literal>group by</literal> clause nor the
+ <literal>order by</literal> clause may contain arithmetic expressions.
+ Also note that Hibernate currently does not expand a grouped entity,
+ so you can't write <literal>group by cat</literal> if all properties
+ of <literal>cat</literal> are non-aggregated. You have to list all
+ non-aggregated properties explicitly. </para>
</sect1>
@@ -888,35 +926,11 @@
HQLå¯åãåããã¯ãselectãŸãã¯whereç¯ã ãã§äœ¿ãããããšã«æ³šæããŠãã ããã
</para>
- <para>
- selectãªã¹ãã«è€æ°ã®åŒãæã€å¯åãåããã«ã¯ãã¿ãã«ã䜿ãããšãã§ããŸãã
+ <para>
+ Note that subqueries can also utilize <literal>row value
constructor</literal> syntax. See
+ <xref linkend="queryhql-tuple"/> for more details.
</para>
- <programlisting><![CDATA[from Cat as cat
-where not ( cat.name, cat.color ) in (
- select cat.name, cat.color from DomesticCat cat
-)]]></programlisting>
-
- <para>
- ããã€ãã®ããŒã¿ããŒã¹ïŒOracleãHSQLã«ã¯ãããŸããïŒã§ã¯ã
- ä»ã®ã³ã³ããã¹ãã§ãã¿ãã«ã䜿ããŸãã
- äŸãã°ãã¯ãšãªã³ã³ããŒãã³ããè€åãŠãŒã¶åã«ãããŠã§ãã
- </para>
-
- <programlisting><![CDATA[from Person where name = ('Gavin',
'A', 'King')]]></programlisting>
-
- <para>
- åçã§ãããããåé·ãªã¯ãšãªã§ãïŒ
- </para>
-
- <programlisting><![CDATA[from Person where name.first = 'Gavin'
and name.initial = 'A' and name.last =
'King')]]></programlisting>
-
- <para>
- ãã®ãããªããšãããããªãã®ã«ã¯2ã€ã®çç±ããããŸãïŒ
- 1ã€ç®ã¯ãããŒã¿ããŒã¹ãã©ãããã©ãŒã éã§å®å
šãªäºææ§ã¯ãªãããã§ãã
- 2ã€ç®ã¯ãã¯ãšãªããããã³ã°ããã¥ã¡ã³ãã®ããããã£ã®é åºã«äŸåããããã§ãã
- </para>
-
</sect1>
<sect1 id="queryhql-examples">
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-25
06:31:49 UTC (rev 14130)
+++
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/session_api.xml 2007-10-25
07:54:59 UTC (rev 14131)
@@ -1,6 +1,6 @@
<?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">
-
+<!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>ãªããžã§ã¯ããæ±ã</title>
@@ -96,6 +96,28 @@
<literal>save()</literal> ã®ä»£ããã«ãEJB3 ã®åæãã©ããã§å®çŸ©ããã
<literal>persist()</literal> ã䜿ãããšãå¯èœã§ãã
</para>
+ <itemizedlist spacing="compact">
+ <listitem>
+ <para>
+ <literal>persist()</literal> makes a transient instance persistent.
+ However, it doesn't guarantee that the identifier value will be assigned to
+ the persistent instance immediately, the assignment might happen at flush time.
+ <literal>persist()</literal> also guarantees that it will not execute an
+ <literal>INSERT</literal> statement if it is called outside of
transaction
+ boundaries. This is useful in long-running conversations with an extended
+ Session/persistence context.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>save()</literal> does guarantee to return an identifier. If an
INSERT
+ has to be executed to get the identifier ( e.g. "identity" generator, not
+ "sequence"), this INSERT happens immediately, no matter if you are inside
or
+ outside of a transaction. This is problematic in a long-running conversation
+ with an extended Session/persistence context.
+ </para>
+ </listitem>
+ </itemizedlist>
<para>
代ããã«ãèå¥åãåŒæ°ã«ãšã <literal>save()</literal>
@@ -1119,4 +1141,4 @@
</sect1>
-</chapter>
+</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-25
06:31:49 UTC (rev 14130)
+++
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/toolset_guide.xml 2007-10-25
07:54:59 UTC (rev 14131)
@@ -1,6 +1,6 @@
<?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">
-
+<!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
@@ -220,9 +220,12 @@
<entry><literal>foreign-key</literal></entry>
<entry><literal>å€éšããŒå</literal></entry>
<entry>
-
<one-to-one>ã<many-to-one>ã<many-to-many>ãããã³ã°èŠçŽ ã䜿ã£ãŠã
- é¢é£ã«å¯Ÿãçæãããå€éšããŒå¶çŽã®ååãæå®ããŸãã
- <literal>SchemaExport</literal> ã¯
<literal>inverse="true"</literal> åŽãèæ
®ããªãããšã«æ³šæããŠãã ããã
+ specifies the name of the foreign key constraint generated
+ for an association, for a
<literal><one-to-one></literal>,
+ <literal><many-to-one></literal>,
<literal><key></literal>,
+ or <literal><many-to-many></literal> mapping element.
Note that
+ <literal>inverse="true"</literal> sides will not be
considered
+ by <literal>SchemaExport</literal>.
</entry>
</row>
<row>
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-25
06:31:49 UTC (rev 14130)
+++
core/trunk/documentation/manual/ja-JP/src/main/docbook/content/transactions.xml 2007-10-25
07:54:59 UTC (rev 14131)
@@ -1,1278 +1,1260 @@
<?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>ãã©ã³ã¶ã¯ã·ã§ã³ãšäžŠè¡æ§</title>
-
- <para>
- Hibernateãšåæå®è¡å¶åŸ¡ã«ã€ããŠæãéèŠãªç¹ã¯ã容æã«çè§£ã§ããããšã§ãã
- Hibernateã¯æ°ããªããã¯ã®æ¯ãèãã远å ããŠããããçŽæ¥JDBCã³ãã¯ã·ã§ã³ãšJTAãªãœãŒã¹ã䜿çšããŸãã
- JDBCãANSIãããã³ããŒã¿ããŒã¹ç®¡çã·ã¹ãã ïŒDBMSïŒã®ãã©ã³ã¶ã¯ã·ã§ã³åé¢ã®ä»æ§ã
- å°ãæéããããŠå匷ããããšãåŒ·ãæšå¥šããŸãã
- </para>
-
- <para>
- Hibernateã¯ã¡ã¢ãªå
ã®ãªããžã§ã¯ããããã¯ããŸããã
- ã¢ããªã±ãŒã·ã§ã³ã¯ãããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®åé¢ã¬ãã«ã§
- å®çŸ©ããæ¯ãèããæåŸ
ã§ããŸãã
- ãã©ã³ã¶ã¯ã·ã§ã³ã¹ã³ãŒãã®ãã£ãã·ã¥ã§ããã <literal>Session</literal> ã®ãé°ã§ã
- èå¥åãã¯ãšãªã«ããæ€çŽ¢ãããšã³ãã£ãã£ã¯ãªããŒã¿ãã«ãªãŒãã«ãªããŸã
- ïŒã¹ã«ã©ãŒå€ãè¿ããããªã¬ããŒãã¯ãšãªã¯éããŸãïŒã
- </para>
-
- <para>
- ããŒãžã§ãã³ã°ã«ããèªåçãªæ¥œèгçåæå®è¡å¶åŸ¡ã«å ããŠã
- <literal>SELECT FOR UPDATE</literal> æã䜿çšããŠã
- è¡ãæ²èгçããã¯ããããã®ïŒãã€ããŒãªïŒAPIãæäŸããŸãã
- 楜芳çåæå®è¡å¶åŸ¡ãšãã®APIã«ã€ããŠã¯ããã®ç« ã®åŸã®ã»ãã§è°è«ããŸãã
- </para>
-
- <para>
- ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãé·ã察話ïŒconversationããã³ã°ãã©ã³ã¶ã¯ã·ã§ã³ïŒã ãã§ãªãã
-
<literal>Configuration</literal>ã<literal>SessionFactory</literal>ãããã³
- <literal>Session</literal>
- ãšããç²åºŠã§Hibernateãè¡ãåæå®è¡å¶åŸ¡ã®è°è«ãå§ããŸãã
- </para>
-
- <sect1 id="transactions-basics" revision="1">
- <title>sessionã¹ã³ãŒããštransactionã¹ã³ãŒã</title>
-
- <para>
- <literal>SessionFactory</literal> ã¯çæããããšãé«äŸ¡ã§ã
- ã¹ã¬ããã»ãŒããªãªããžã§ã¯ãã§ãã
- ãã£ãŠãã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®ã¹ã¬ããã§å
±æãã¹ãã§ãã
- éåžžãã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«ã
- <literal>Configuration</literal> ã€ã³ã¹ã¿ã³ã¹ããïŒåºŠã ãçæããŸãã
- </para>
-
- <para>
- <literal>Session</literal> ã¯é«äŸ¡ã§ã¯ãªããã¹ã¬ããã»ãŒããªãªããžã§ã¯ãã§ããããŸããã
- ãã£ãŠãïŒã€ã®èŠæ±ãïŒã€ã®å¯Ÿè©±ãïŒã€ã®äœæ¥åäœïŒunit of workïŒã«å¯ŸããŠïŒåºŠã ã䜿ãã
- ãã®åŸã§æšãŠãã¹ãã§ãã
- <literal>Session</literal> ã¯å¿
èŠã«ãªããŸã§ã
- JDBC <literal>Connection</literal>ïŒãããã¯
<literal>DataSource</literal>ïŒãç²åŸããŸããã
- ããã«ãå®éã«äœ¿çšãããšããŸã§ãªãœãŒã¹ãæ¶è²»ããŸããã
- </para>
-
- <para>
- ãã®ç¶æ³ãå®äºãããããã«ã ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã«ã€ããŠãèããªããã°ãªããŸããã
- ããŒã¿ããŒã¹å
ã®ããã¯ã®ç«¶åãå°ãªãããããã«ã
- ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã¯å¯èœãªéãçãããã¹ãã§ãã
- é·ãããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã¯ãã¢ããªã±ãŒã·ã§ã³ã®é«ã䞊åå®è¡æ§ãé»å®³ããŸãã
- ããã«ããŠãŒã¶ãŒãèããŠããéïŒäœæ¥åäœãå®äºãããŸã§ïŒããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã
- éãããŸãŸã«ããã®ã¯ããããŠãã®å Žåããèšèšãšã¯ãããŸããã
- </para>
-
- <para>
- äœæ¥åäœãšããã¹ã³ãŒããšã¯äœã§ããããïŒ
- ïŒã€ã®Hibernate <literal>Session</literal> ã¯ã
- ããã€ãã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ããŸãããããšãã§ããã§ããããïŒ
- ãŸãã¯ãã¹ã³ãŒããšäžå¯Ÿäžã®é¢ä¿ã§ããããïŒ
- ã〠<literal>Session</literal> ãéããéããã¹ãã§ããããïŒ
- ãããŠãããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³å¢çãã©ã®ããã«åããã®ã§ããããïŒ
- </para>
-
- <sect2 id="transactions-basics-uow" revision="1">
- <title>äœæ¥åäœïŒUnit of workïŒ</title>
-
- <para>
- ïŒã€ç®ã¯ã<emphasis>session-per-operation</emphasis>
ã¢ã³ããã¿ãŒã³ã䜿ã£ãŠã¯ãããŸããã
- ããªãã¡ãïŒã€ã®ã¹ã¬ããã®äžã§ãåçŽãªããŒã¿ããŒã¹åŒã³åºãã®ãã³ã«
- <literal>Session</literal> ãéããŠãéããŠã¯ãããŸããïŒ
- ãã¡ãããããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã«ã€ããŠãåæ§ã§ãã
- ã¢ããªã±ãŒã·ã§ã³äžã®ããŒã¿ããŒã¹åŒã³åºãã¯ã
- èšç»ãããã·ãŒã±ã³ã¹ïŒplanned sequenceïŒã䜿ãã
- ã¢ãããã¯ãªäœæ¥åäœã«åé¡ãããŸãã
- ïŒïŒã€ã®SQLæããšã«ã³ãããããèªåã³ããããã
- 䜿ãããªããšããæå³ã§ãããããšã«æ³šæããŠãã ããã
- èªåã³ãããã¯ãSQLã³ã³ãœãŒã«ã§ã¢ãããã¯ãªäœæ¥ãããéã«äœ¿ããã®ã§ãã
- Hibernateã¯çŽã¡ã«èªåã³ãããã¢ãŒããç¡å¹ã«ããŸãã
- ãããã¯ãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãç¡å¹åããããšãæåŸ
ããŸããïŒ
- ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã¯ãªãã·ã§ã³ã§ã¯ãããŸããã
- ããŒã¿ããŒã¹ãšã®ãã¹ãŠã®éä¿¡ã¯ãããŒã¿ã®èªã¿èŸŒã¿ã§ãã£ãŠããæžã蟌ã¿ã§ãã£ãŠãã
- ãã©ã³ã¶ã¯ã·ã§ã³ã®äžã§è¡ããªããã°ãªããŸããã
- 説æãããšãããŒã¿èªã¿èŸŒã¿ã«å¯ŸããŠãèªåã³ãããã¯é¿ããã¹ãã§ãã
- ãªããªãã倿°ã®å°ããªãã©ã³ã¶ã¯ã·ã§ã³ã¯ãæç¢ºã«å®çŸ©ãããïŒã€ã®äœæ¥åäœãšæ¯ã¹ãŠã
- ããã©ãŒãã³ã¹ããããªãããšã¯ãããŸããã
- åŸè
ã¯ä¿å®æ§ãæ¡åŒµæ§ãããããããŠããŸãã
- </para>
-
- <para>
- ãã«ããŠãŒã¶ãŒã®ã¯ã©ã€ã¢ã³ãïŒãµãŒããŒã¢ããªã±ãŒã·ã§ã³ã®äžã§ã
- æããã䜿ããããã¿ãŒã³ã¯ã<emphasis>session-per-request</emphasis> ã§ãã
- ãã®ã¢ãã«ã®äžã§ã¯ã
- ã¯ã©ã€ã¢ã³ãããïŒHibernateæ°žç¶åå±€ãåäœããïŒãµãŒããŒãžãªã¯ãšã¹ããéããã
- æ°ããHibernate <literal>Session</literal> ãéãããŸãã
- ãããŠããã®äœæ¥åäœã®äžã§ãã¹ãŠã®ããŒã¿ããŒã¹åŠçãå®è¡ãããŸãã
- äœæ¥ãå®äºããïŒãããŠãã¯ã©ã€ã¢ã³ããžã®ã¬ã¹ãã³ã¹ãæºåã§ããïŒæç¹ã§ã
- session ããã©ãã·ã¥ããéããŸãã
- ã¯ã©ã€ã¢ã³ãã®èŠæ±ãåŠçããããã«ãïŒã€ã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã䜿çšããã§ãããã
- <literal>Session</literal> ãéããéããéã«ã
- ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãéå§ããã³ãããããŸãã
- äºã€ã®é¢ä¿ã¯äžå¯Ÿäžã§ãã
- ãã®ã¢ãã«ã¯å€ãã®ã¢ããªã±ãŒã·ã§ã³ã«å®å
šã«é©åããŸãã
- </para>
-
- <para>
- 以éã®å®è£
ã«ãã£ã¬ã³ãžããŠãã ããã
- <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>
- 以éã®å®è£
ã«ãã£ã¬ã³ãžããŠãã ããã
- Hibernateã¯åçŽãªãã®ãã¿ãŒã³ã®ããã«ãäºãçµã¿èŸŒãŸãã
- ãcurrent sessionãã®ç®¡çãæäŸããŸãã
- ãµãŒããŒãªã¯ãšã¹ããåŠçããéã¯ãã©ã³ã¶ã¯ã·ã§ã³ãéå§ããªããã°ãªããŸããã
- ãããŠãã¬ã¹ãã³ã¹ãã¯ã©ã€ã¢ã³ãã«éä¿¡ããåã«ãã©ã³ã¶ã¯ã·ã§ã³ãçµããããŸãã
- 奜ããªæ¹æ³ã§å®çŸã§ããŸããäžè¬çãªè§£æ±ºç㯠<literal>ServletFilter</literal> ã
- ãµãŒãã¹ã¡ãœããããã€ã³ãã«ããããŠAOPã€ã³ã¿ãŒã»ãã¿ãŒã
- proxy/interception ã³ã³ããã§ãã
- EJBã³ã³ããã¯EJBã»ãã·ã§ã³ããŒã³ããã©ã³ã¶ã¯ã·ã§ã³å¢çãšããŠ
- ã¢ã¹ãã¯ããã¯ãã¹ã«ããããå®è£
ã®æšæºçãªæ¹æ³ã§ãïŒCMTã«ãã宣èšçïŒã
- ããã°ã©ã ã«ãããã©ã³ã¶ã¯ã·ã§ã³å¢çã䜿ããšæ±ºããå Žåã
- ç°¡åã«äœ¿ããããäºææ§ã®ããã³ãŒãã«ããããã«ã
- ãã®ç« ã®åŸã®ã»ãã«ããHibernate <literal>Transaction</literal>
APIã®ã»ããããã§ãã
- </para>
-
- <para>
- ã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒãã¯ãå¿
èŠãªãšãã«ã©ãã§ããäœåã§ãã
- åã« <literal>sessionFactory.getCurrentSession()</literal>
ãåŒã³åºãã ãã§
- ãçŸåšã®ã»ãã·ã§ã³ãã«ã¢ã¯ã»ã¹ã§ããŸãã
- çŸåšã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãžã® <literal>ã»ãã·ã§ã³</literal> ãåžžã«ååŸããŸãã
- ãªãœãŒã¹ã»ããŒã«ã«ãªç°å¢ããããã¯JTAç°å¢ãæ§æããªããã°ãªããŸãã
- ïŒ<xref linkend="architecture-current-session"/>
ãåç
§ããŠãã ããïŒã
- </para>
-
- <para>
- ãšãã©ããããã¥ãŒãæç»ããããŸã§ <literal>ã»ãã·ã§ã³</literal>
- ãšããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®ã¹ã³ãŒããæ¡åŒµãããšäŸ¿å©ãªããšããããŸãã
- ããã¯ãèŠæ±ã®åŠçãšæç»ã®ãã§ãŒãºãåããŠãã
- ãµãŒãã¬ããã¢ããªã±ãŒã·ã§ã³ã«ãããŠç¹ã«åœ¹ç«ã¡ãŸãã
- ç¬èªã®ã€ã³ã¿ãŒã»ãã¿ãå®è£
ããã°ã
- ãã¥ãŒãæç»ãããŸã§ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãæ¡åŒµããã®ã¯ç°¡åã§ãã
- ããããã³ã³ãã管çãã©ã³ã¶ã¯ã·ã§ã³ã®EJBã«é Œãå Žåã¯ãç°¡åã«ã¯ã§ããŸããã
- ãªããªãããã¥ãŒã®æç»ãéå§ããåã«ãEJBã®ã¡ãœããããªã¿ãŒã³ããéã«ã
- ãã©ã³ã¶ã¯ã·ã§ã³ãå®äºããããã§ãã
- ãã® <emphasis>Open Session in View</emphasis>
ãã¿ãŒã³ã«é¢é£ãããã³ããšäŸã«ã€ããŠã¯ã
- Hibernateã®Webãµã€ãããã©ãŒã©ã ãåç
§ããŠãã ããã
- </para>
-
- </sect2>
-
- <sect2 id="transactions-basics-apptx" revision="1">
- <title>é·ã察話</title>
-
- <para>
- session-per-requestãã¿ãŒã³ã¯ãäœæ¥åäœãèšèšããéã«åœ¹ç«ã€èããšããã ãã§ã¯ãããŸããã
- å€ãã®ããžãã¹ããã»ã¹ã¯ããŠãŒã¶ãŒãšã®äžé£ã®çžäºäœçšå
šäœãèŠæ±ããŸãã
- ãã®çžäºäœçšã«ã¯ãããŒã¿ããŒã¹ã¢ã¯ã»ã¹ãå«ãŸããŸãã
-
- Webãšãšã³ã¿ãŒãã©ã€ãºã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã
- ãŠãŒã¶ãšã®çžäºäœçšã«ãŸã§æž¡ãããšã¯èš±ãããŸããã
-
- 次ã®äŸãããèããŠã¿ãŠãã ããã
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- ãã€ã¢ãã°ã®æåã®ç»é¢ãéããåã
ã® <literal>Session</literal>
- ãšããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®äžã§ããŒããããããŒã¿ããŠãŒã¶ãŒã«èŠããŸãã
- ãŠãŒã¶ãŒã¯ãªããžã§ã¯ããèªç±ã«ä¿®æ£ã§ããŸãã
- </para>
- </listitem>
- <listitem>
- <para>
- 5ååŸã«ãŠãŒã¶ãŒã¯ãSaveããã¯ãªãã¯ããä¿®æ£ãæ°žç¶åãããã®ãæåŸ
ããŸãã
- ãŸãããã®æ
å ±ãç·šéããã®ã¯èªåïŒäººã ãã§ã
- ä¿®æ£ã®ã³ã³ããªã¯ãã¯çºçããªããšæåŸ
ããŸãã
- </para>
- </listitem>
- </itemizedlist>
-
- <para>
- ãã®äœæ¥åäœãïŒãŠãŒã¶ãŒã®èŠç¹ã§ïŒé·æã® <emphasis>察話</emphasis>
- ïŒãããã¯ã<emphasis>ã¢ããªã±ãŒã·ã§ã³ãã©ã³ã¶ã¯ã·ã§ã³</emphasis> ïŒãšåŒã³ãŸãã
- ã¢ããªã±ãŒã·ã§ã³ã«ãããå®è£
ããæ¹æ³ã¯ãããããããŸãã
- </para>
-
- <para>
- æåã«æãã€ãå®è£
ã¯ããŠãŒã¶ãŒãèããŠããéã<literal>Session</literal>
- ãšããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãéãããŸãŸã«ããŠããããšã§ãã
- åæã«ä¿®æ£ããããåé¢ãšååæ§ãä¿èšŒãããããã«ã
- ããŒã¿ããŒã¹å
ã®ããã¯ã¯ä¿æãããŸãŸã«ããŸãã
- ãã¡ãããããã¯ã¢ã³ããã¿ãŒã³ã§ãã
- ãªããªããããã¯ã®ç«¶åãçºçãããšã
- ã¢ããªã±ãŒã·ã§ã³ãåæãŠãŒã¶ãŒæ°ã«å¿ããŠã¹ã±ãŒã«ã¢ããã§ããªããªãããã§ãã
- </para>
-
- <para>
- æããã«ã察話ãå®è£
ããããã«ã¯ã
- ããã€ãã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã䜿çšããã¹ãã§ãã
- ãã®å Žåãããžãã¹ããã»ã¹ã®åé¢ãç¶æããããšã¯ã
- ã¢ããªã±ãŒã·ã§ã³å±€ã®è²¬åã®ïŒã€ã«ãªããŸãã
- ïŒã€ã®å¯Ÿè©±ã¯ã
- éåžžããã€ãã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã«åã³ãŸãã
- ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®ïŒã€ã®ã¿ïŒæåŸã®ïŒã€ïŒãæŽæ°ããããŒã¿ãä¿åãã
- ä»ã¯ããŒã¿ãèªãã ãã§ããã°ãããã¯ã¢ãããã¯ã§ã
- ïŒäŸãã°ãããã€ãã®èŠæ±ïŒå¿çãç¹°ãè¿ããŠã£ã¶ãŒã圢åŒã®ãã€ã¢ãã°ïŒã
- ããã¯èããããå®è£
ããã»ããç°¡åã§ãã
- Hibernateã®æ©èœã䜿ãã®ã§ããã°ãç¹ã«ç°¡åã§ãã
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>èªåããŒãžã§ãã³ã°</emphasis>
- - Hibernateã¯èªåçã«æ¥œèгçåæå®è¡å¶åŸ¡ãã§ããŸãã
- ãŠãŒã¶ãŒãèããŠããéã«åæã«ä¿®æ£ããããå Žåãèªåçã«æ€åºã§ããŸãã
- éåžžã察話ã®çµäºæã«ãã§ãã¯ããã ãã§ãã
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>åé¢ïŒDetachedïŒãªããžã§ã¯ã</emphasis> - ãã§ã«è°è«ãã
- <emphasis>session-per-request</emphasis>
ãã¿ãŒã³ã䜿ããšæ±ºå®ããå Žåã
- ããŒãããããã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã¯ããŠãŒã¶ãèããŠããéã¯ã
- ã»ãã·ã§ã³ããåé¢ãããç¶æ
ã«ãªããŸãã
- ãªããžã§ã¯ããã»ãã·ã§ã³ã«å远å ããä¿®æ£ãæ°žç¶åã§ããŸãã
- ããã
<emphasis>session-per-request-with-detached-objects</emphasis>
- ãã¿ãŒã³ãšåŒã³ãŸãã
- èªåããŒãžã§ãã³ã°ã䜿ãããšã§ãåæã«è¡ãããä¿®æ£ãåé¢ã§ããŸãã
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>æ¡åŒµïŒãããã¯ãé·ãïŒã»ãã·ã§ã³</emphasis>
- - Hibernateã® <literal>Session</literal> ã¯ã
- ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãã³ãããããåŸã
- è£ã§çµã³ã€ããŠããJDBCã³ãã¯ã·ã§ã³ãåæã§ããŸãã
- ãããŠãã¯ã©ã€ã¢ã³ãããã®æ°ããèŠæ±ãçºçããéã«ã忥ç¶ã§ããŸãã
-
ãã®ãã¿ãŒã³ã¯ã<emphasis>session-per-conversation</emphasis>
- ãšããåã§ç¥ãããŠããããªããžã§ã¯ããã»ãã·ã§ã³ãžå远å ããããšããäžèŠã«ããŸãã
- èªåããŒãžã§ãã³ã°ã䜿ãããšã§ãåæã«è¡ãããä¿®æ£ãåé¢ã§ããŸãã
-
- éåžž <literal>Session</literal> ãèªåçã«ãã©ãã·ã¥ãããã
- æç€ºçã«ãã©ãã·ã¥ããŸãã
- </para>
- </listitem>
- </itemizedlist>
-
- <para>
-
<emphasis>session-per-request-with-detached-objects</emphasis> ãš
- <emphasis>session-per-conversation</emphasis> ã®ïŒã€ã¯ã
- å©ç¹ã𿬠ç¹ãæã£ãŠããŸãã
- ããã«ã€ããŠã¯ããã®ç« ã®åŸã®ã»ãã§ã楜芳çåæå®è¡å¶åŸ¡ã®æèã®äžã§è°è«ããŸãã
- </para>
-
- </sect2>
-
- <sect2 id="transactions-basics-identity">
- <title>ãªããžã§ã¯ãèå¥åãèãã</title>
-
- <para>
- ã¢ããªã±ãŒã·ã§ã³ã¯ãïŒã€ã®ç°ãªã <literal>Session</literal> ãã
- åãæ°žç¶ç¶æ
ã«åæã«ã¢ã¯ã»ã¹ã§ããŸãã
- ããããïŒã€ã® <literal>Session</literal> ã€ã³ã¹ã¿ã³ã¹ã
- æ°žç¶æ§ã¯ã©ã¹ã®ïŒã€ã®ã€ã³ã¹ã¿ã³ã¹ãå
±æããããšã¯ã§ããŸããã
- ããã«ãèå¥åã«ã¯ïŒã€ã®ç°ãªãæŠå¿µããããšããããšã«ãªããŸãã
- </para>
-
- <variablelist spacing="compact">
- <varlistentry>
- <term>ããŒã¿ããŒã¹èå¥å</term>
- <listitem>
- <para>
- <literal>foo.getId().equals( bar.getId()
)</literal>
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>JVMèå¥å</term>
- <listitem>
- <para>
- <literal>foo==bar</literal>
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>
- <emphasis>åã
ã®</emphasis>
<literal>Session</literal> ã«è¿œå ããããªããžã§ã¯ãã«ãšã£ãŠ
- ïŒããªãã¡ãïŒã€ã® <literal>Session</literal> ã®ã¹ã³ãŒãã®äžã§ã¯ïŒãïŒã€ã®æŠå¿µã¯åãã§ãã
- ããŒã¿ããŒã¹åäžæ§ãšJVMåäžæ§ãäžèŽããããšããHibernateãä¿èšŒããŸãã
- ããããã¢ããªã±ãŒã·ã§ã³ãïŒã€ã®ç°ãªãã»ãã·ã§ã³ãã
- ãåããïŒæ°žç¶æ§èå¥åã®ïŒããžãã¹ãªããžã§ã¯ãã«åæã«ã¢ã¯ã»ã¹ããéãã
- ïŒã€ã®ã€ã³ã¹ã¿ã³ã¹ã¯å®éã«ïŒJVMèå¥åãïŒãç°ãªãããŸãã
- 楜芳çã¢ãããŒãã«ãã£ãŠãïŒèªåããŒãžã§ãã³ã°ã®ïŒãã©ãã·ã¥ïŒã³ãããæã«
- ã³ã³ããªã¯ãã解決ãããŸãã
- </para>
-
- <para>
- ãã®ã¢ãããŒãã§ã¯ãHibernateãšããŒã¿ããŒã¹ã«åæå®è¡ã«ã€ããŠã®å¿é
ãæ®ããŸãã
- äžæ¹ã§ãæé«ã®ã¹ã±ãŒã©ããªãã£ãæäŸãããŸãã
- ãªããªããïŒã¹ã¬ããã®äœæ¥åäœã®äžã§äžææ§ãä¿èšŒãããã°ã
- é«äŸ¡ãªããã¯ãåæåãäžèŠã«ãªãããã§ãã
- <literal>Session</literal> ããšã«ïŒã€ã®ã¹ã¬ããã貌ãä»ããéãã
- ã¢ããªã±ãŒã·ã§ã³ã¯ããžãã¹ãªããžã§ã¯ããsynchronizeããå¿
èŠã¯ãããŸããã
- <literal>Session</literal> å
ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯ãªããžã§ã¯ããæ¯èŒããããã«ã
- <literal>==</literal> ãå®å
šã«äœ¿çšã§ããŸãã
- </para>
-
- <para>
- ããã©ãã<literal>Session</literal> ã®å€ã§
<literal>==</literal>
- ã䜿ãã¢ããªã±ãŒã·ã§ã³ã¯ãäºæããªãçµæã«ééããŸãã
- ããã¯äºæããªãå Žæã§èµ·ããããŸãã
- äŸãã°ãïŒã€ã®åé¢ã€ã³ã¹ã¿ã³ã¹ãåã <literal>Set</literal> ã«
- putãããšããªã©ã§ãã
- äž¡æ¹ãšãåãããŒã¿ããŒã¹èå¥åãæã¡ãŸãïŒããªãã¡ãåãè¡ã衚ããŸãïŒã
- ããããåé¢ç¶æ
ã®ã€ã³ã¹ã¿ã³ã¹ã®JVMèå¥åã¯åœç¶ä¿èšŒãããŸããã
- éçºè
ã¯ãæ°žç¶æ§ã¯ã©ã¹ã® <literal>equals()</literal> ãš
<literal>hashCode()</literal>
- ã¡ãœããããªãŒããŒã©ã€ããããªããžã§ã¯ãç䟡æ§ã®æŠå¿µãå®è£
ãã¹ãã§ãã
- èŠåãïŒã€ãããŸããç䟡æ§ã®å®è£
ã«ããŒã¿ããŒã¹èå¥åã䜿ããªãã§ãã ããã
- ãŠããŒã¯ãªïŒæ®éã¯äžå€ã®ïŒå±æ§ã®çµã¿åããã§ããããžãã¹ããŒã䜿ã£ãŠãã ããã
- ãããäžæãªããžã§ã¯ããæ°žç¶åãããå ŽåãããŒã¿ããŒã¹èå¥åãå€ãããŸãã
- äžæãªããžã§ã¯ããïŒéåžžåé¢ã€ã³ã¹ã¿ã³ã¹ãšå
±ã«ïŒ <literal>Set</literal>
- ã«ä¿æããå Žåãããã·ã¥ã³ãŒããå€ãããšããããšã¯ã<literal>Set</literal>
- ã®å¥çŽãç Žããšããããšã§ãã
- ããžãã¹ããŒã®ããã®å±æ§ã¯ãããŒã¿ããŒã¹ã®äž»ããŒã»ã©å®å®ãã¹ãã§ã¯ãªãã§ãã
- ãªããžã§ã¯ããåã <literal>Set</literal> ã®äžã«ããéã ããå®å®ãä¿èšŒãã¹ãã§ãã
- ãã®åé¡ã®ãã培åºçãªè°è«ã¯ãHibernateã®Webãµã€ããåç
§ããŠãã ããã
- ãŸããããã¯Hibernateã®åé¡ã§ã¯ãªããåã«Javaãªããžã§ã¯ãã®èå¥åãç䟡æ§ã
- ã©ã®ããã«å®è£
ãã¹ãããšããããšã§ãã
- </para>
-
- </sect2>
-
- <sect2 id="transactions-basics-issues">
- <title>äžè¬çãªåé¡</title>
-
- <para>
- <emphasis>session-per-user-session</emphasis> ãš
- <emphasis>session-per-application</emphasis> ã¢ã³ããã¿ãŒã³
- ã¯äœ¿ã£ãŠã¯ãããŸããïŒãã¡ããããŸãã«äŸå€ããããŸãïŒã
- 泚æïŒäžèšã®åé¡ã®ããã€ãã¯ãæšå¥šããããã¿ãŒã³ãšããŠãåºçŸããŸãã
- èšèšã決å®ããåã«ãè£ã®æå³ãçè§£ããããã«ããŠãã ããã
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- <literal>Session</literal> ã¯ã¹ã¬ããã»ãŒãã§ã¯ãããŸããã
- HTTPãªã¯ãšã¹ããã»ãã·ã§ã³BeanãSwingã¯ãŒã«ãŒã®ããã«ã
- åæå®è¡ãå¯èœãªãã®ã <literal>Session</literal> ã€ã³ã¹ã¿ã³ã¹ãå
±æãããšã
- ç«¶åç¶æ
ãåŒãèµ·ãããŸãã
- ïŒåŸã§è°è«ããïŒ<literal>HttpSession</literal> ã®äžã§
- Hibernate <literal>Session</literal> ãä¿æããå Žåã
- HttpSessionãžã®ã¢ã¯ã»ã¹ãåæåããããšãèæ
®ãã¹ãã§ãã
- ãããªããã°ããŠãŒã¶ãŒãååæ©ããªããŒããã¯ãªãã¯ãããšã
- åæã«èµ°ãïŒã€ã®ã¹ã¬ããã®äžã§ãåã <literal>Session</literal>
ã䜿ãããŸãã
- </para>
- </listitem>
- <listitem>
- <para>
- HibernateãäŸå€ãæããå Žåã¯ãããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ããã¯ãã
- çŽã¡ã« <literal>Session</literal> ãéããã¹ãã§ãïŒè©³çްãåŸã§è°è«ããŸãïŒã
- <literal>Session</literal> ãã¢ããªã±ãŒã·ã§ã³ã«çµã³ä»ããããŠããã®ã§ããã°ã
- ã¢ããªã±ãŒã·ã§ã³ã忢ãã¹ãã§ãã
- ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ããã¯ããŠããããžãã¹ãªããžã§ã¯ãã¯
- ãã©ã³ã¶ã¯ã·ã§ã³ãéå§ãããšãã®ç¶æ
ã«æ»ããŸããã
- ããã¯ãããŒã¿ããŒã¹ã®ç¶æ
ãšããžãã¹ãªããžã§ã¯ãã¯åæããŠããªãããšãæå³ããŸãã
- éåžžããã¯åé¡ã«ãªããŸããã
- ãªããªããäŸå€ã¯å埩ã§ããªãããã§ãã
- ãšã«ããããŒã«ããã¯ããåŸã«ããçŽãã¹ãã§ãã
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>Session</literal>
ã¯æ°žç¶ïŒpersistentïŒç¶æ
ã®ãã¹ãŠã®ãªããžã§ã¯ãã
- ãã£ãã·ã¥ããŸãïŒHibernateã¯ç£èŠããããŒãã£ç¶æ
ããã§ãã¯ããŸãïŒã
- ããã¯ãé·ãéã»ãã·ã§ã³ãéãããŸãŸã«ãããã
- éåžžã«å€ãã®ããŒã¿ãããŒããç¶ãããããå Žåã¯ã
- OutOfMemoryExceptionãçºçãããŸã§ç¡éã«å€§ãããªãããšãæå³ããŸãã
- 解決çã®ïŒã€ã¯ã<literal>Session</literal> ãã£ãã·ã¥ã管çããããã«ã
- <literal>clear()</literal> ã
<literal>evict()</literal> ãåŒã¶ããšã§ãã
- ãããã倧ããªããŒã¿ãåŠçããå¿
èŠããããªãã
- ãã¶ãã¹ãã¢ãããã·ãŒãžã£ãèæ
®ããã¹ãã§ãããã
- ããã€ãã®è§£æ±ºçã¯ã<xref linkend="batch"/> ã§ç޹ä»ãããŠããŸãã
- ãŠãŒã¶ãŒã»ãã·ã§ã³ã®éã<literal>Session</literal>
ãéãããŸãŸã«ãããšããããšã¯ã
- ããŒã¿ãæ°é®®ã§ãªããªã確çãé«ããªãããšãæå³ããŸãã
- </para>
- </listitem>
- </itemizedlist>
-
- </sect2>
-
- </sect1>
-
- <sect1 id="transactions-demarcation">
- <title>ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³å¢ç</title>
-
- <para>
- ããŒã¿ããŒã¹ïŒãããã¯ã·ã¹ãã ïŒãã©ã³ã¶ã¯ã·ã§ã³ã®å¢çã¯ãåžžã«å¿
èŠã§ãã
- ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®å€ã§ãããŒã¿ããŒã¹ãšã®éä¿¡ã¯èµ·ããŸãã
- ïŒããã¯èªåã³ãããã¢ãŒãã«æ
£ããŠããå€ãã®éçºè
ãæ··ä¹±ããããããããŸããïŒã
- èªã¿èŸŒãã ãã®æäœã«ã§ãããã€ãæç¢ºãªãã©ã³ã¶ã¯ã·ã§ã³å¢çã䜿çšããŠãã ããã
- åé¢ã¬ãã«ãšããŒã¿ããŒã¹ã®èœå次第ã§ãããã¯å¿
èŠãªããããããŸãããã
- åžžã«ãã©ã³ã¶ã¯ã·ã§ã³å¢çãæç€ºçã«æå®ããŠãããã€ãã¹é¢ã¯å
šããããŸããã
-
- 確ãã«ãïŒã€ã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã¯å€æ°ã®å°ããªãã©ã³ã¶ã¯ã·ã§ã³ãã
- ïŒããŒã¿ã®èªã¿èŸŒã¿ã§ãã£ãŠãïŒããã©ãŒãã³ã¹ãããããŠããŸãã
- </para>
-
- <para>
- J2EEç°å¢ã«ç®¡çãããŠããªãç¶æ
- ïŒããªãã¡ãã¹ã¿ã³ãã¢ãã³ãåçŽãªWebãSwingã¢ããªã±ãŒã·ã§ã³ïŒã§ãã
- 管çãããç¶æ
ã§ããHibernateã¢ããªã±ãŒã·ã§ã³ãå®è¡ã§ããŸãã
- 管çãããŠããªãç°å¢ã§ã¯ãHiberanteãããŒã¿ããŒã¹ã®ã³ãã¯ã·ã§ã³ããŒã«ãæäŸããŸãã
- ã¢ããªã±ãŒã·ã§ã³éçºè
ã¯ããã©ã³ã¶ã¯ã·ã§ã³å¢çãæåã§èšå®ããªããã°ãªããŸããã
- èšãæãããšãããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®éå§ãã³ããããããŒã«ããã¯ã
- éçºè
èªèº«ãèšå®ããå¿
èŠããããšããããšã§ãã
-
- éåžžã管çãããç°å¢ã§ã¯ãã³ã³ãã管çã«ãããã©ã³ã¶ã¯ã·ã§ã³ïŒCMTïŒãæäŸãããŸãã
- äŸãã°ãã»ãã·ã§ã³Beanã®ãããã€ã¡ã³ããã£ã¹ã¯ãªãã¿ã§å®£èšçã«å®çŸ©ãã
- ãã©ã³ã¶ã¯ã·ã§ã³ãçµã¿ç«ãŠãŸãã
- ããã°ã©ã ã«ãããã©ã³ã¶ã¯ã·ã§ã³å¢çã¯ããå¿
èŠãããŸããã
- </para>
-
- <para>
- ããããªããã管çãããŠããªããªãœãŒã¹ã»ããŒã«ã«ãªç°å¢ãš
- JTAã«äŸåããã·ã¹ãã ïŒCMTã§ã¯ãªãBMTïŒã®äž¡æ¹ã«ã
- æ°žç¶åå±€ãããŒã¿ãã«ã«ä¿ã€ã®ã¯ããã°ãã°æãŸããããšã§ãã
-
- ãããã€ç°å¢ã®ãã€ãã£ãã®ãã©ã³ã¶ã¯ã·ã§ã³ã·ã¹ãã ãåŒã³åºã
- <literal>Transaction</literal> ãšããã©ãããŒAPIãHibernateãæäŸããŸãã
- ãã®APIã䜿ããã¯ä»»æã§ãããCMTã®ã»ãã·ã§ã³Beanã䜿ããªãã®ã§ããã°ã䜿ãããšãåŒ·ãæšå¥šããŸãã
- </para>
-
- <para>
- éåžžã<literal>Session</literal> çµäºã¯ãïŒã€ã®ç°ãªããã§ãŒãºãå«ã¿ãŸãã
- </para>
-
- <itemizedlist spacing="compact">
- <listitem>
- <para>
- ã»ãã·ã§ã³ã®ãã©ãã·ã¥
- </para>
- </listitem>
- <listitem>
- <para>
- ãã©ã³ã¶ã¯ã·ã§ã³ã®ã³ããã
- </para>
- </listitem>
- <listitem>
- <para>
- ã»ãã·ã§ã³ã®ã¯ããŒãº
- </para>
- </listitem>
- <listitem>
- <para>
- äŸå€ã®ãã³ããªã³ã°
- </para>
- </listitem>
- </itemizedlist>
-
- <para>
- ã»ãã·ã§ã³ã®ãã©ãã·ã¥ã«ã€ããŠã¯ãåã®ã»ãã§ãã§ã«è°è«ããŸããã
- 管çãããç°å¢ãšç®¡çãããŠããªãç°å¢ã®äž¡æ¹ã«ã€ããŠã
- ãã©ã³ã¶ã¯ã·ã§ã³å¢çãšäŸå€ãã³ããªã³ã°ããã£ãšè©³ããèŠãŠãããŸãããã
- </para>
-
-
- <sect2 id="transactions-demarcation-nonmanaged"
revision="2">
- <title>管çãããŠããªãç°å¢</title>
-
- <para>
- Hibernateæ°žç¶åå±€ã管çãããŠããªãç°å¢ã§å®è£
ããå Žåã¯ã
-
- éåžžåçŽãªã³ãã¯ã·ã§ã³ããŒã«ïŒããªãã¡DataSourceã§ã¯ãªãïŒã«ãã£ãŠã
- ããŒã¿ããŒã¹ã³ãã¯ã·ã§ã³ãå¶åŸ¡ããŸãã
- Hibernateã¯ãã®ã³ãã¯ã·ã§ã³ããŒã«ããå¿
èŠãªã³ãã¯ã·ã§ã³ãååŸããŸãã
-
- ã»ãã·ã§ã³ïŒãã©ã³ã¶ã¯ã·ã§ã³å¶åŸ¡ã®ã€ãã£ãªã ã¯æ¬¡ã®ããã«ãªããŸãã
- </para>
-
- <programlisting><![CDATA[// Non-managed environment idiom
-Session sess = factory.openSession();
-Transaction tx = null;
-try {
- tx = sess.beginTransaction();
-
- // do some work
- ...
-
- tx.commit();
-}
-catch (RuntimeException e) {
- if (tx != null) tx.rollback();
- throw e; // or display error message
-}
-finally {
- sess.close();
-}]]></programlisting>
-
- <para>
- æç€ºçã« <literal>Session</literal> ã®
<literal>flush()</literal> ãåŒã³åºãã¹ãã§ã¯ãªãã
- <literal>commit()</literal> ãåŒã³åºãããšã«ãããèªåçã«åæååŠçãå®è¡ãããŸã
- ïŒã»ãã·ã§ã³ã® <xref
linkend="objectstate-flushing">FlushMode</xref> ã«äŸåããŠããïŒã
-
- <literal>close()</literal> ãåŒã³åºãããšã«ãããã»ãã·ã§ã³ã®çµãããæç¢ºã«ããŸãã
- <literal>close()</literal> ãæé»çã«è¡ãäž»ãªããšã¯ã
- ã»ãã·ã§ã³ãJDBCã³ãã¯ã·ã§ã³ãéæŸããããšã§ãã
-
- äžèšã®Javaã³ãŒãã¯ããŒã¿ãã«ã§ããã管çãããŠããªãç°å¢ãšJTAç°å¢ã®äž¡æ¹ã§å®è¡ã§ããŸãã
- </para>
-
- <para>
- ããé©å¿æ§ã®ãã解決çã¯ãHibernateã«äºãçµã¿èŸŒãŸããŠãã
- ãcurrent sessionãã³ã³ããã¹ã管çã§ãã
- èšèã§èª¬æããããäžèšãèŠãã»ããéãã§ãããã
- </para>
-
- <programlisting><![CDATA[// Non-managed environment idiom with
getCurrentSession()
-try {
- factory.getCurrentSession().beginTransaction();
-
- // do some work
- ...
-
- factory.getCurrentSession().getTransaction().commit();
-}
-catch (RuntimeException e) {
- factory.getCurrentSession().getTransaction().rollback();
- throw e; // or display error message
-}]]></programlisting>
-
- <para>
- æ£èŠã®ã¢ããªã±ãŒã·ã§ã³ã®äžã§ã¯ããã®ãããªã³ãŒãã®åãç«¯ãæ±ºããŠèŠãªãã§ãããã
- èŽåœçãªïŒã·ã¹ãã ïŒäŸå€ã¯ãåžžã«ãæäžäœãã§ãã£ãããã¹ãã§ãã
- èšãæããã°ãïŒæ°žç¶åå±€ã§ïŒHibernateåŒã³åºããå®è¡ããã³ãŒããšã
- <literal>RuntimeException</literal> ãå¶åŸ¡ãã
- ïŒéåžžã¯ã¯ãªãŒã³ã¢ãããšçµäºã®ã¿è¡ãããšãã§ããïŒã³ãŒãã¯ãå¥ã
ã®å±€ã®äžã«ãããŸãã
- Hibernateã«ããã«ã¬ã³ãã³ã³ããã¹ã管çã¯ããã®èšèšãããªãåçŽã«ããŸãã
- å¿
èŠãªã®ã¯ã<literal>SessionFactory</literal> ã«ã¢ã¯ã»ã¹ããããšã ãã§ãã
- äŸå€åŠçã¯ããã®ç« ã®åŸã®ã»ãã§è°è«ããŸãã
- </para>
-
- <para>
- 泚æïŒïŒããã©ã«ãã§ããïŒ
-
<literal>org.hibernate.transaction.JDBCTransactionFactory</literal>
- ãéžæããã¹ãã§ãã
- 第2ã®çšäŸãšããŠã¯ã
- <literal>hibernate.current_session_context_class</literal> ã
- <literal>"thread"</literal> ãšãããšããã§ãããã
- </para>
-
- </sect2>
-
- <sect2 id="transactions-demarcation-jta" revision="3">
- <title>JTAã䜿çšãã</title>
-
- <para>
- æ°žç¶åå±€ãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒïŒäŸãã°ãEJBã»ãã·ã§ã³Beanã®èåŸïŒã§å®è¡ããå Žåã
- HibernateããååŸãããã¹ãŠã®ããŒã¿ãœãŒã¹ã³ãã¯ã·ã§ã³ã¯ã
- èªåçã«ã°ããŒãã«JTAãã©ã³ã¶ã¯ã·ã§ã³ã®äžéšã«ãªããŸãã
-
- EJBã䜿ããã«ãã¹ã¿ã³ãã¢ãã³ã®JTAå®è£
ãå°å
¥ããããšãã§ããŸãã
- JTAçµ±åã®ããã«ãHibernateã¯ïŒã€ã®æŠç¥ãæäŸããŸãã
- </para>
-
- <para>
- Bean管çãã©ã³ã¶ã¯ã·ã§ã³ïŒBMTïŒã䜿ãã<literal>Transaction</literal>
APIã䜿ãå Žåã
- Hibernateã¯ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã«BMTãã©ã³ã¶ã¯ã·ã§ã³ã®éå§ãšçµãããåããŸãã
- ããªãã¡ããã©ã³ã¶ã¯ã·ã§ã³ç®¡çã®ã³ãŒãã¯ã管çãããªãç°å¢ãšåãã«ãªããŸãã
- </para>
-
- <programlisting><![CDATA[// BMT idiom
-Session sess = factory.openSession();
-Transaction tx = null;
-try {
- tx = sess.beginTransaction();
-
- // do some work
- ...
-
- tx.commit();
-}
-catch (RuntimeException e) {
- if (tx != null) tx.rollback();
- throw e; // or display error message
-}
-finally {
- sess.close();
-}]]></programlisting>
-
- <para>
- ãã©ã³ã¶ã¯ã·ã§ã³å¢çãšã㊠<literal>Session</literal> ã䜿ãããå Žåã
- ç°¡åã«ã³ã³ããã¹ããäŒæããæ©èœã§ãã <literal>getCurrentSession()</literal>
ãããã®ã§ã
- JTAã® <literal>UserTransaction</literal> APIãçŽæ¥äœ¿çšãã¹ãã§ãããã
- </para>
-
- <programlisting><![CDATA[// BMT idiom with getCurrentSession()
-try {
- UserTransaction tx = (UserTransaction)new InitialContext()
- .lookup("java:comp/UserTransaction");
-
- tx.begin();
-
- // Do some work on Session bound to transaction
- factory.getCurrentSession().load(...);
- factory.getCurrentSession().persist(...);
-
- tx.commit();
-}
-catch (RuntimeException e) {
- tx.rollback();
- throw e; // or display error message
-}]]></programlisting>
-
- <para>
- CMTã§ã¯ããã©ã³ã¶ã¯ã·ã§ã³å¢çãã»ãã·ã§ã³Beanã®ãããã€ã¡ã³ããã£ã¹ã¯ãªãã¿ã§å®çŸ©ãã
- ããã°ã©ã ã§ã¯è¡ããŸããã
- ããã«ãã³ãŒãã¯æ¬¡ã®ããã«å°ãªããªããŸãã
- </para>
-
- <programlisting><![CDATA[// CMT idiom
- Session sess = factory.getCurrentSession();
-
- // do some work
- ...
-]]></programlisting>
-
- <para>
- CMT/EJBã®äžã§ã¯ãåžžã«ããŒã«ããã¯ãèªåçã«å®æœãããŸãã
- ãªããªããã»ãã·ã§ã³ããŒã³ã®ã¡ãœããã«ããæããããå¶åŸ¡ãããŠããªã
- <literal>RuntimeException</literal> ã¯ãã°ããŒãã«ãã©ã³ã¶ã¯ã·ã§ã³ã
- ããŒã«ããã¯ããããã«ã³ã³ããã«äŒããããã§ãã
- <emphasis>ããã¯ãBMTãããã¯CMTãšãã£ããã«Hibernate
<literal>Transaction</literal>
- APIã䜿ãå¿
èŠã¯å°ãããªããšããæå³ã§ãã</emphasis>
- </para>
-
- <para>
- Hibernateã®ãã©ã³ã¶ã¯ã·ã§ã³ãã¡ã¯ããªãèšå®ããéã«ã
- JTAãçŽæ¥äœ¿ãïŒBMTã®ïŒå Žåã¯
<literal>org.hibernate.transaction.JTATransactionFactory</literal> ãã
- CMTã»ãã·ã§ã³ããŒã³ã®äžã§ã¯
<literal>org.hibernate.transaction.CMTTransactionFactory</literal> ã
- éžæãã¹ãã ãšããããšã«æ³šæããŠãã ããã
-
<literal>hibernate.transaction.manager_lookup_class</literal>
- ãã»ããããããšãæãåºããŠãã ããã
- ãªãã<literal>hibernate.current_session_context_class</literal>
ã¯ã
- ã»ããããªããïŒåŸæ¹äºæïŒã<literal>"jta"</literal> ãã»ããããŠãã ããã
- </para>
-
- <para>
- <literal>getCurrentSession()</literal>
ãªãã¬ãŒã·ã§ã³ã¯ãJTAç°å¢ã§ã¯ïŒã€ã®æ¬ ç¹ãæã¡ãŸãã
-
- ããã©ã«ãã§äœ¿ããã <literal>after_statement</literal>
ã³ãã¯ã·ã§ã³ãªãªãŒã¹ã¢ãŒãã䜿çšããäžã§ã
- èŠåãïŒã€ãããŸãã
-
- JTA仿§ã®æããªå¶çŽã®ããã«ã
- <literal>scroll()</literal> ãŸãã¯
<literal>iterate()</literal> ãè¿ããã
- éããããŠããªã <literal>ScrollableResults</literal> ãŸãã¯
<literal>Iterator</literal>
- ã€ã³ã¹ã¿ã³ã¹ãHibernateãèªåçã«ã¯ãªãŒã³ã¢ããããããšã¯ã§ããŸããã
-
- <literal>finally</literal> ãããã¯ã®äžã§ã
- <literal>ScrollableResults.close()</literal> ãŸãã¯
- <literal>Hibernate.close(Iterator)</literal> ãæç€ºçã«åŒã³åºããŠã
- è£ã«æœãã ããŒã¿ããŒã¹ã«ãŒãœã«ãè§£æŸ <emphasis>ããªããã°ãªããŸãã</emphasis>ã
-
- ïŒãã¡ãããå€ãã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãJTAãCMTã³ãŒãã§ <literal>scroll()</literal>
- ã <literal>iterate()</literal> ã®äœ¿çšãé¿ããã®ã¯å®¹æã§ããïŒ
- </para>
-
- </sect2>
-
- <sect2 id="transactions-demarcation-exceptions">
- <title>äŸå€ãã³ããªã³ã°</title>
-
- <para>
- <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>
ã¯ãHibernateæ°žç¶åå±€ã®äžã§çºçããå€ãã®ãšã©ãŒã
- ã©ãããããæ€æ»ãããªãäŸå€ã§ãïŒHibernateã®å€ãããŒãžã§ã³ã¯éããŸããïŒã
- ç§ãã¡ã®æèŠã¯ãã¢ããªã±ãŒã·ã§ã³éçºè
ã«å埩äžå¯èœãªäŸå€ã
- äžå±€ã§ãã£ããããããšã匷èŠãã¹ãã§ã¯ãªããšããããšã§ãã
- å€ãã®ã·ã¹ãã ã§ã¯ãæ€æ»ãããªãäŸå€ãšèŽåœçãªäŸå€ã¯ã
- ã³ãŒã«ã¹ã¿ãã¯ã®æåã®ãã¬ãŒã ã®ïŒã€ïŒäŸãã°ãæäžäœã®å±€ã§ïŒã§ãã³ããªã³ã°ãã
- ãšã©ãŒã¡ãã»ãŒãžãã¢ããªã±ãŒã·ã§ã³ãŠãŒã¶ãŒã«è¡šç€ºããŸã
- ïŒãããã¯ãä»ã®é©åãªåŠçã宿œããŸãïŒã
- Hibernateã¯ã<literal>HibernateException</literal>
以å€ã®æ€æ»ãããªãäŸå€ã
- æããããšã«æ³šæããŠãã ããã
- ãããããŸããå埩äžå¯èœã§ãããé©åãªåŠçã宿œãã¹ãã§ãã
- </para>
-
- <para>
- 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> -
- åºç€ãšãªãJDBCéä¿¡ã®ãšã©ãŒã衚ããŸãã
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>SQLGrammarException</literal> -
- çºè¡ããSQLã®ææ³ãããã¯æ§æã®åé¡ã衚ããŸãã
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>ConstraintViolationException</literal> -
- äœããã®åœ¢åŒã®å®å
šæ§å¶çŽéåã衚ããŸãã
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>LockAcquisitionException</literal> -
- èŠæ±ãããæäœã宿œããã®ã«å¿
èŠãªããã¯ã¬ãã«ãåŸãéã®ãšã©ãŒã衚ããŸãã
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>GenericJDBCException</literal> -
- ä»ã®ã«ããŽãªã«äžèŽããªãã£ãäžè¬çãªäŸå€ã§ãã
- </para>
- </listitem>
- </itemizedlist>
-
- </sect2>
-
- <sect2 id="transactions-demarcation-timeout">
- <title>ãã©ã³ã¶ã¯ã·ã§ã³ã®ã¿ã€ã ã¢ãŠã</title>
-
- <para>
- EJBã®ãããªç®¡çãããç°å¢ãæäŸããããããŠéèŠãªç¹åŸŽã®ïŒã€ã¯ã
- ãã©ã³ã¶ã¯ã·ã§ã³ã®ã¿ã€ã ã¢ãŠãã§ãã
- ããã¯ç®¡çãããŠããªãã³ãŒãã«ã¯æäŸã§ããŸããã
- ãã©ã³ã¶ã¯ã·ã§ã³ã¿ã€ã ã¢ãŠãã¯ãäžåè¡ãªãã©ã³ã¶ã¯ã·ã§ã³ã
- ãŠãŒã¶ãŒã«ã¬ã¹ãã³ã¹ãè¿ããªããŸãŸãç¡æéã«ãªãœãŒã¹ã䜿ãç¶ããªã
- ããšãä¿éããŸãã
- 管çãããç°å¢ïŒJTAïŒã®å€ã§ã¯ãHibernateã¯ãã®æ©èœããã«ã«æäŸã§ããŸããã
- ããããªãããHibernateã¯æ¬¡ã®ãããªããŒã¿ã¢ã¯ã»ã¹æäœã®å¶åŸ¡ãããã¯ã§ããŸãã
- ããŒã¿ããŒã¹ã¬ãã«ã®ãããããã¯ã倧ããªãªã¶ã«ãã»ãããè¿ãã¯ãšãªã
- å®çŸ©ãããã¿ã€ã ã¢ãŠãã«ãã£ãŠç¢ºå®ã«å¶éããŸãã
- 管çãããç°å¢ã§ã¯ãHibernateã¯ãã©ã³ã¶ã¯ã·ã§ã³ã¿ã€ã ã¢ãŠããJTAã«å§è²ããŸãã
- ãã®æ©èœã¯ãHibernateã® <literal>Transaction</literal> ãªããžã§ã¯ãã«
- ãã£ãŠæœè±¡åãããŠããŸãã
- </para>
-
- <programlisting><![CDATA[
-Session sess = factory.openSession();
-try {
- //set transaction timeout to 3 seconds
- sess.getTransaction().setTimeout(3);
- sess.getTransaction().begin();
-
- // do some work
- ...
-
- sess.getTransaction().commit()
-}
-catch (RuntimeException e) {
- sess.getTransaction().rollback();
- throw e; // or display error message
-}
-finally {
- sess.close();
-}]]></programlisting>
-
- <para>
- CMTããŒã³ã®äžã§ã¯ <literal>setTimeout()</literal> ã
- åŒã³åºããªãããšã«æ³šæããŠãã ããã
- ãã©ã³ã¶ã¯ã·ã§ã³ã¿ã€ã ã¢ãŠãã¯å®£èšçã«å®çŸ©ãããã¹ãã§ãã
- </para>
-
- </sect2>
-
- </sect1>
-
- <sect1 id="transactions-optimistic">
- <title>楜芳çåæå®è¡å¶åŸ¡</title>
-
- <para>
- é«ãäžŠåæ§ãšé«ãã¹ã±ãŒã©ããªãã£ã®äž¡æ¹ãå®çŸããã¢ãããŒãã¯ã
- ããŒãžã§ãã³ã°ã䜿ã£ã楜芳çåæå®è¡å¶åŸ¡ã®ã¿ã§ãã
- æŽæ°ã®è¡çªãèŠã€ããããã«ïŒããã³ãæŽæ°ã倱ãããã®ãé²ãããã«ïŒã
- ããŒãžã§ã³çªå·ãããã¯ã¿ã€ã ã¹ã¿ã³ãã䜿ã£ãŠãããŒãžã§ã³ããã§ãã¯ããŸãã
- Hibernateã¯ã楜芳çåæå®è¡ãè¡ãã¢ããªã±ãŒã·ã§ã³ã³ãŒããæžãããã®
- ã¢ãããŒããïŒã€æäŸããŸãã
- ç§ãã¡ãèŠãããŠãŒã¹ã±ãŒã¹ã¯ãé·ã察話ãæã¡ãŸããã
- ããŒãžã§ã³ãã§ãã¯ã¯ãŸã ïŒã€ã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®äžã§æŽæ°ã倱ãããšãé²ã
- å©ç¹ãæã£ãŠããŸãã
- </para>
-
- <sect2 id="transactions-optimistic-manual">
- <title>ã¢ããªã±ãŒã·ã§ã³ã«ããããŒãžã§ã³ãã§ãã¯</title>
-
- <para>
- Hibernateã«ã»ãšãã©å©ããŠããããã«å®è£
ããã±ãŒã¹ã§ãã
- ããŒã¿ããŒã¹ãšã®ããåãã¯ãããããæ°ãã <literal>Session</literal> ã®äžã§èµ·ãããŸãã
- éçºè
ã¯ããã¹ãŠã®æ°žç¶æ§ã€ã³ã¹ã¿ã³ã¹ãæäœããåã«ã
- ããŒã¿ããŒã¹ããåèªã¿èŸŒã¿ãã責åããããŸãã
- ãã®ã¢ãããŒãã§ã¯ã察話ãã©ã³ã¶ã¯ã·ã§ã³ã®åé¢ãå®ãããã«ã
- ã¢ããªã±ãŒã·ã§ã³èªèº«ãããŒãžã§ã³ãã§ãã¯ãè¡ãå¿
èŠããããŸãã
- ãã®ã¢ãããŒãã¯ãããŒã¿ããŒã¹ã¢ã¯ã»ã¹ã®äžã§ã¯ãæãéå¹çã§ãã
- ãšã³ãã£ãã£EJBãšæã䌌ãŠããã¢ãããŒãã§ãã
- </para>
-
- <programlisting><![CDATA[// foo is an instance loaded by a previous
Session
-session = factory.openSession();
-Transaction t = session.beginTransaction();
-
-int oldVersion = foo.getVersion();
-session.load( foo, foo.getKey() ); // load the current state
-if ( oldVersion != foo.getVersion() ) throw new StaleObjectStateException();
-foo.setProperty("bar");
-
-t.commit();
-session.close();]]></programlisting>
-
- <para>
- <literal><version></literal>
ã䜿ã£ãŠã<literal>version</literal>
- ããããã£ããããã³ã°ããŸãã
- Hibernateã¯ããšã³ãã£ãã£ãããŒãã£ã§ããå Žåããã©ãã·ã¥ãã
- ãã®éã« <literal>version</literal> ããããã£ãèªåçã«ã€ã³ã¯ãªã¡ã³ãããŸãã
- </para>
-
- <para>
- ãã¡ãããããŒã¿ã®äžŠåæ§ãäœãç°å¢ã§éçšããŠãããããŒãžã§ã³ãã§ãã¯ãäžèŠãªãã
- ãã®ã¢ãããŒãã䜿ããããŒãžã§ã³ãã§ãã¯ãã¹ãããããã ãã§ãã
- ãã®å Žåã¯ãé·ã察話ã«ã¯ã
- <emphasis>ãæåŸã«ã³ããããããã®ãåã€ã</emphasis> ãããã©ã«ãã®æŠç¥ã§ãããã
- ãã®ã¢ãããŒãã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒãæ··ä¹±ããããããããªãããšã
- å¿ã«çããŠçœ®ããŠãã ãããããã¯ããšã©ãŒã¡ãã»ãŒãžãç«¶åãã倿ŽãããŒãžããæ©äŒã
- ãªããŸãŸãæŽæ°ã倱ãçµéšãããããã§ãã
- </para>
-
- <para>
- 確ãã«ãããã¥ã¢ã«ã«ããããŒãžã§ã³ãã§ãã¯ã¯ãäºçްãªååŒã ãã§å®è¡ã§ããŸããã
- å€ãã®ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠå®çšçã§ã¯ãããŸããã
- ãã°ãã°ãïŒã€ã®ã€ã³ã¹ã¿ã³ã¹ã ãã§ãªãã
- ä¿®æ£ããããªããžã§ã¯ãã®å®å
šãªã°ã©ãããã§ãã¯ããªããã°ãªããŸããã
- Hibernateã¯ãèšèšãã©ãã€ã ãšããŠãæ¡åŒµ <literal>Session</literal> ã
- åé¢ãããã€ã³ã¹ã¿ã³ã¹ãèªåçã«ããŒãžã§ã³ãã§ãã¯ããŸãã
- </para>
-
- </sect2>
-
- <sect2 id="transactions-optimistic-longsession">
- <title>æ¡åŒµã»ãã·ã§ã³ãšèªåããŒãžã§ãã³ã°</title>
-
- <para>
- ïŒã€ã® <literal>Session</literal> ã€ã³ã¹ã¿ã³ã¹ãšãã®æ°žç¶æ§ã€ã³ã¹ã¿ã³ã¹ã¯ã
- <emphasis>session-per-conversation</emphasis> ãšããŠç¥ãããã
- 察話å
šäœã§äœ¿ãããŸãã
- Hibernateã¯ãã©ãã·ã¥ããéã«ãã€ã³ã¹ã¿ã³ã¹ã®ããŒãžã§ã³ããã§ãã¯ããŸãã
- åæã«ä¿®æ£ãããããšãæ€åºãããšãäŸå€ãæããŸãã
- ãã®äŸå€ããã£ããããŠæ±ãã®ã¯ãéçºè
ã®è²¬ä»»ã§ã
- ïŒäžè¬çãªéžæè¢ã¯ã倿ŽãããŒãžãããå€ããªãããŒã¿ã§ããžãã¹å¯Ÿè©±ã
- åã¹ã¿ãŒãããæ©äŒããŠãŒã¶ãŒã«æäŸããããšã§ãïŒã
- </para>
-
- <para>
- ãŠãŒã¶ãŒã®å¯Ÿè©±ãåŸ
ã£ãŠãããšãã¯ã
- <literal>Session</literal> ãåºç€ãšãªãJDBCã³ãã¯ã·ã§ã³ããåãé¢ããŸãã
- ãã®ã¢ãããŒãã¯ãããŒã¿ããŒã¹ã¢ã¯ã»ã¹ã®äžã§ã¯ãæãå¹ççã§ãã
- ã¢ããªã±ãŒã·ã§ã³ã¯ãããŒãžã§ã³ãã§ãã¯ãåé¢ãããã€ã³ã¹ã¿ã³ã¹ãå远å ããããš
- ã«é¢å¿ãæã€å¿
èŠã¯ãããŸããããŸããããããããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®äžã§
- ã€ã³ã¹ã¿ã³ã¹ãåèªã¿èŸŒã¿ããå¿
èŠã¯ãããŸããã
- </para>
-
- <programlisting><![CDATA[// foo is an instance loaded earlier by the
old session
-Transaction t = session.beginTransaction(); // Obtain a new JDBC connection, start
transaction
-
-foo.setProperty("bar");
-
-session.flush(); // Only for last transaction in conversation
-t.commit(); // Also return JDBC connection
-session.close(); // Only for last transaction in
conversation]]></programlisting>
-
- <para>
- <literal>foo</literal> ãªããžã§ã¯ãã¯ãèªåãããŒããã
<literal>Session</literal>
- ããŸã ç¥ã£ãŠããŸãã
- å€ãã»ãã·ã§ã³ã®äžã§æ°ããããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãéå§ããããšã§ã
- æ°ããã³ãã¯ã·ã§ã³ãååŸãããã®ã»ãã·ã§ã³ãåéãããŸãã
- ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãã³ãããããããšã§ã
- ã»ãã·ã§ã³ããJDBCã³ãã¯ã·ã§ã³ãåæããã³ãã¯ã·ã§ã³ãããŒã«ã«è¿ããŸãã
- 忥ç¶ããåŸãæŽæ°ããŠããªãããŒã¿ã®ããŒãžã§ã³ãã§ãã¯ã匷å¶ããããã«ã
- ä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«ããæŽæ°ãããŠãããããããªããªããžã§ã¯ãã«é¢ããŠã
- <literal>LockMode.READ</literal> ãã€ããŠ
<literal>Session.lock()</literal>
- ãåŒã³åºãããšãã§ããŸãã
- æŽæ°ã㊠<emphasis>ãã</emphasis> ããŒã¿ãããã¯ããå¿
èŠã¯ãããŸããã
-
- éåžžãæ¡åŒµ <literal>Session</literal> ã«
<literal>FlushMode.MANUAL</literal>
- ãã»ããããŸãã
- æåŸã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®åšæã§ã®ã¿ã
- 察話ã®äžã§å€æŽããããã¹ãŠãå®éã«æ°žç¶åãããããã§ãã
- ããã«ãæåŸã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®ã¿ <literal>flush()</literal>
- ãªãã¬ãŒã·ã§ã³ãå«ã¿ãŸãããããŠã察話ãçµããããããã«ã
- ã»ãã·ã§ã³ã <literal>close()</literal> ããŸãã
- </para>
-
- <para>
- ãŠãŒã¶ãŒãèæ
®äžã«ãæ ŒçŽããããšãã§ããªãããã <literal>Session</literal>
- ã倧ããã®ã§ããã°ããã®ãã¿ãŒã³ã¯åé¡ããããŸãã
- äŸãã°ã<literal>HttpSession</literal> ã¯å¯èœãªéãå°ããä¿ã€ã¹ãã§ãã
- <literal>Session</literal> ã¯ïŒåŒ·å¶çã«ïŒïŒæ¬¡ãã£ãã·ã¥ã§ãããã
- ããŒããããªããžã§ã¯ãããã¹ãŠä¿æããŸãã
- ããããããªã¯ãšã¹ãïŒã¬ã¹ãã³ã¹ã®ãµã€ã¯ã«ãæ°åã§ããã°ããã®æŠç¥ã䜿ããŸãã
-
- ïŒã€ã®å¯Ÿè©±ã®ããã ãã« <literal>Session</literal> ã䜿ãã¹ãã§ãã
- ãªããªããããã«æ°é®®ã§ãªãããŒã¿ãæã€ããã§ãã
- </para>
-
- <para>
- ïŒHibernateã®ä»¥åã®ããŒãžã§ã³ã¯ãæç€ºç㪠<literal>Session</literal> ã®
- åæãšåæ¥ç¶ãå¿
èŠã ã£ãããšã«æ³šæããŠãã ããã
- ãããã®ã¡ãœããã¯éæšå¥šã«ãªããŸããã
- ãªããªãããã©ã³ã¶ã¯ã·ã§ã³ã®éå§ãšçµäºã¯åã广ãããããã§ããïŒ
- </para>
-
- <para>
- åæãã <literal>Session</literal> ãæ°žç¶åå±€ã®è¿ãã§ä¿æãã¹ãã§ããããšã«
- 泚æããŠãã ããã
- èšãæãããšãïŒå±€ç°å¢ã®äžã§ <literal>Session</literal> ãä¿æããããã«ã
- EJBã¹ããŒããã«ã»ãã·ã§ã³Beanã䜿ã£ãŠãã ããã
- <literal>HttpSession</literal> ã«æ ŒçŽããããã«ãWebå±€ã«è»¢éããªãã§ãã ãã
- ïŒå¥ã®å±€ãžã®ã·ãªã¢ã©ã€ãºãããªãã§ãã ããïŒã
- </para>
-
- <para>
-
æ¡åŒµã»ãã·ã§ã³ãã¿ãŒã³ïŒãããã¯ã<emphasis>session-per-conversation</emphasis>ïŒã¯ã
- èªåçãªã«ã¬ã³ãã»ãã·ã§ã³ã³ã³ããã¹ã管çã宿œããããé£ããã
- ãã®ããã«ãããªã㯠<literal>CurrentSessionContext</literal>
ã®å®è£
ãäŸçµŠããå¿
èŠããããŸãã
- Hibernate Wikiã«ããäŸãåç
§ããŠãã ããã
- </para>
-
- </sect2>
-
- <sect2 id="transactions-optimistic-detached">
- <title>ãã¿ããããããªããžã§ã¯ããšèªåããŒãžã§ãã³ã°</title>
-
- <para>
- æ°ãã <literal>Session</literal>ã«ãããæ°žç¶åã¹ãã¢ïŒè𳿳šïŒïŒ€ïŒ¢ïŒãšã®å¯Ÿè©±ãçºçããŸãã
- ãŸãäžæ¹ãåãæ°žç¶æ§ã€ã³ã¹ã¿ã³ã¹ããããŒã¿ããŒã¹ãšã®å¯Ÿè©±ããšã«åå©çšãããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã¯ãå
ã
ã¯ä»ã® <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
-foo.setProperty("bar");
-session = factory.openSession();
-Transaction t = session.beginTransaction();
-session.saveOrUpdate(foo); // Use merge() if "foo" might have been loaded
already
-t.commit();
-session.close();]]></programlisting>
-
- <para>
- ãã®å Žåããã¯ããHibernateã¯ãã©ãã·ã¥ããéã«ãã€ã³ã¹ã¿ã³ã¹ã®ããŒãžã§ã³ããã§ãã¯ããŸãã
- æŽæ°ã®ç«¶åãçºçããå Žåã«ã¯ãäŸå€ãæããŸãã
- </para>
-
- <para>
- ãªããžã§ã¯ããä¿®æ£ãããŠããªãããšã確信ããŠããå Žåã¯ã
- <literal>update()</literal>
ã®ä»£ããã«ã<literal>LockMode.READ</literal> ã䜿ã£ãŠã
- <literal>lock()</literal> ãåŒã³åºãããšãã§ããŸã
- ïŒãã¹ãŠã®ãã£ãã·ã¥ãè¿åããããŒãžã§ã³ãã§ãã¯ã宿œããŸãïŒã
- </para>
-
- </sect2>
-
- <sect2 id="transactions-optimistic-customizing">
- <title>èªåããŒãžã§ãã³ã°ã®ã«ã¹ã¿ãã€ãº</title>
-
- <para>
- ãããã³ã°ã® <literal>optimistic-lock</literal> 屿§ã«
<literal>false</literal>
- ãèšå®ããããšã«ãããç¹å®ã®ããããã£ãã³ã¬ã¯ã·ã§ã³ã®ããã«
- èªåããŒãžã§ã³ã€ã³ã¯ãªã¡ã³ããç¡å¹ã«ã§ããŸãã
- ããããã£ãããŒãã£ã§ãã£ãŠããããŒãžã§ã³ãã€ã³ã¯ãªã¡ã³ãããŸããã
- </para>
-
- <para>
- ã¬ã¬ã·ãŒã®ããŒã¿ããŒã¹ã¹ããŒãã¯ããã°ãã°åºå®çã§ããã倿Žã§ããŸããã
- ãŸãã¯ãä»ã®ã¢ããªã±ãŒã·ã§ã³ãåãããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ããªããã°ãªããã
- ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ããŒãžã§ã³çªå·ãã¿ã€ã ã¹ã¿ã³ãããæäœããæ¹æ³ãç¥ããŸããã
- ã©ã¡ãã®å ŽåããããŒãã«ã®ç¹å®ã®ã«ã©ã ãåœãŠã«ããŠãããŒãžã§ãã³ã°ãè¡ããŸããã
- ããŒãžã§ã³ãã¿ã€ã ã¹ã¿ã³ãã®ããããã£ããããã³ã°ããã«ãããŒãžã§ã³ãã§ãã¯ãããããã«ã
- <literal><class></literal> ãããã³ã°ã«
<literal>optimistic-lock="all"</literal> ã
- æå®ããŠãã ããã
- è¡ã®ãã¹ãŠã®ãã£ãŒã«ãã®ç¶æ
ãæ¯èŒããããã«ãªããŸãã
- ããã¯ãHibernateãå€ãç¶æ
ãšæ°ããç¶æ
ãæ¯èŒã§ããå Žåã«ã
- çè«çã«åäœããã ãã§ããããšã«æ³šæããŠãã ããã
- äŸãã°ãsession-per-request-with-detached-objects ã§ã¯ãªãã
- ïŒã€ã®é·ã <literal>Session</literal> ã䜿ãå Žåã§ãã
- </para>
-
- <para>
- ãšãã©ããè¡ããã倿Žãéãªããªãéããåæã«è¡ããã倿Žãåãå
¥ããããšãã§ããŸãã
- <literal><class></literal> ãããã³ã°ã«
<literal>optimistic-lock="dirty"</literal>
- ãèšå®ããå Žåããã©ãã·ã¥ããéã«ãHibernateã¯ããŒãã£ãã£ãŒã«ãã®ã¿ãæ¯èŒããŸãã
- </para>
-
- <para>
- å°çšã®ããŒãžã§ã³ïŒã¿ã€ã ã¹ã¿ã³ãã®ã«ã©ã ã䜿ãå Žåã
- ãããã¯ãã¹ãŠïŒããŒãã£ã®ãã£ãŒã«ããæ¯èŒããå Žåã©ã¡ãã§ãã£ãŠãã
- 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>
-
- </sect1>
-
- <sect1 id="transactions-locking">
- <title>æ²èгçããã¯</title>
-
- <para>
- ãŠãŒã¶ãããã¯æŠç¥ã«æ©ãã®ã«å€ãã®æéãè²»ããããšãæå³ããŠããŸããã
- éåžžã¯ãJDBCã³ãã¯ã·ã§ã³ã«åé¢ã¬ãã«ãæå®ãã
- åã«ããŒã¿ããŒã¹ã«ãã¹ãŠã®ä»äºããããã°ååã§ãã
- ããããªãããé«åºŠãªãŠãŒã¶ã¯ãæä»çãªæ²èгçããã¯ãç²åŸããããšãã
- æ°ãããã©ã³ã¶ã¯ã·ã§ã³ãéå§ãããéã«ããã¯ãåç²åŸããããšã
- ãšãã©ãæããããããŸããã
- </para>
-
- <para>
- Hibernateã¯ãã€ãããŒã¿ããŒã¹ã®ããã¯ã®ä»çµã¿ã䜿ããŸãã
- ã¡ã¢ãªå
ã®ãªããžã§ã¯ããæ±ºããŠããã¯ããŸããïŒ
- </para>
-
- <para>
- <literal>LockMode</literal> ã¯ã©ã¹ã¯ãHibernateãç²åŸã§ããç°ãªãããã¯ã¬ãã«ãå®çŸ©ããŸãã
- 以äžã®ä»çµã¿ã«ãããããã¯ãç²åŸã§ããŸãã
- </para>
-
- <itemizedlist spacing="compact">
- <listitem>
- <para>
- <literal>LockMode.WRITE</literal> ã¯ã
- Hibernateãè¡ãæŽæ°ãããã¯æ¿å
¥ããéã«èªåçã«åŸãããŸãã
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>LockMode.UPGRADE</literal> ã¯ã
- ããŒã¿ããŒã¹ã§ãµããŒããããŠããææ³ <literal>SELECT ... FOR
UPDATE</literal>
- ã䜿ã£ããæç€ºçãªãŠãŒã¶ãŒèŠæ±ã«ããåŸããããããããŸããã
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>LockMode.UPGRADE_NOWAIT</literal> ã¯ã
- Oracle ã§ <literal>SELECT ... FOR UPDATE NOWAIT</literal>
ã䜿ã£ãã
- æç€ºçãªãŠãŒã¶ãŒèŠæ±ã«ããåŸããããããããŸããã
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>LockMode.READ</literal> ã¯ã
- Repeatable Readãããã¯Serializableã®åé¢ã¬ãã«ã§ãããŒã¿ãèªãã éã«èªåçã«åŸãããŸãã
- ãããããæç€ºçãªãŠãŒã¶ãŒèŠæ±ã«ãããåååŸãããŸãã
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>LockMode.NONE</literal> ã¯ãããã¯ããªãããšã衚ããŸãã
- <literal>Transaction</literal> ã®çµããã«ã
- ãã¹ãŠã®ãªããžã§ã¯ãã¯ãã®ããã¯ã¢ãŒãã«åãæ¿ãããŸãã
- <literal>update()</literal> ã
<literal>saveOrUpdate()</literal> ãåŒã³åºãããšã«ãã£ãŠã
- ã»ãã·ã§ã³ã«é¢é£ä»ãããããªããžã§ã¯ããããã®ããã¯ã¢ãŒãã§åºçºããŸãã
- </para>
- </listitem>
- </itemizedlist>
-
- <para>
- ãæç€ºçãªãŠãŒã¶ãŒèŠæ±ããšã¯ãäžèšã®æ¹æ³ã®ïŒã€ã§èšã衚ããŸãã
- </para>
-
- <itemizedlist spacing="compact">
- <listitem>
- <para>
- <literal>LockMode</literal> ãæå®ãã
<literal>Session.load()</literal> ã®åŒã³åºãã
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>Session.lock()</literal> ã®åŒã³åºãã
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>Query.setLockMode()</literal> ã®åŒã³åºãã
- </para>
- </listitem>
- </itemizedlist>
-
- <para>
- <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>
- æå®ãããããã¯ã¢ãŒãã <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>
- ããŒã¿ããŒã¹ãèŠæ±ãããããã¯ã¢ãŒãããµããŒãããŠããªãå Žåã
- Hibernateã¯ïŒäŸå€ãæãã代ããã«ãïŒé©åãªä»£ããã®ã¢ãŒãã䜿ããŸãã
- ããã¯ãã¢ããªã±ãŒã·ã§ã³ãããŒã¿ãã«ã§ããããšãä¿èšŒããŸãã
- </para>
-
- </sect1>
-
- <sect1 id="transactions-connection-release">
- <title>ã³ãã¯ã·ã§ã³éæŸã¢ãŒã</title>
-
- <para>
- 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> - æ¬è³ªçã«äžèšã§è¿°ã¹ãã¬ã¬ã·ãŒã®æ¯ãèãã§ãã
- Hibernateã»ãã·ã§ã³ã¯æåã«JDBCã¢ã¯ã»ã¹ãå®è¡ããå¿
èŠãããéã«ã³ãã¯ã·ã§ã³ãåŸãŸãã
- ãããŠãã»ãã·ã§ã³ãéãããããŸã§ãã³ãã¯ã·ã§ã³ãä¿æããŸãã
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>AFTER_TRANSACTION</literal> -
- <literal>org.hibernate.Transaction</literal> ãå®äºããåŸã
- ã³ãã¯ã·ã§ã³ãéæŸããŸãã
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>AFTER_STATEMENT</literal> ïŒç©æ¥µçãªéæŸãšãåŒã°ããïŒ -
- ãã¹ãŠã®ã¹ããŒãã¡ã³ããããããå®è¡ãããåŸãã³ãã¯ã·ã§ã³ãéæŸãããŸãã
- ã¹ããŒãã¡ã³ããã»ãã·ã§ã³ã«é¢é£ãããªãœãŒã¹ãéãããŸãŸã«ããå Žåã¯ã
- ãã®ç©æ¥µçãªéæŸã¯ã¹ããããããŸãã
- ä»ã®ãšããããããèµ·ããã®ã¯
<literal>org.hibernate.ScrollableResults</literal>
- ã䜿ãããå Žåã®ã¿ã§ãã
- </para>
- </listitem>
- </itemizedlist>
-
- <para>
- ã³ã³ãã£ã°ã¬ãŒã·ã§ã³ãã©ã¡ãŒã¿ã®
<literal>hibernate.connection.release_mode</literal>
- ã¯ã䜿çšããéæŸã¢ãŒããæå®ããããã«äœ¿ããŸãã
- æå®ã§ããå€ã¯æ¬¡ã®éãã§ãã
- </para>
-
- <itemizedlist spacing="compact">
- <listitem>
- <para>
- <literal>auto</literal> ïŒããã©ã«ãïŒ - ãããéžæãããš
-
<literal>org.hibernate.transaction.TransactionFactory.getDefaultReleaseMode()</literal>
- ã¡ãœããã«ãã£ãŠè¿ãããéæŸã¢ãŒãã«å§è²ãããŸãã
- ãã®ã¡ãœããã¯ã
- JTATransactionFactoryã«ã¯ConnectionReleaseMode.AFTER_STATEMENTãè¿ãã
-
JDBCTransactionFactoryã«ã¯ConnectionReleaseMode.AFTER_TRANSACTIONãè¿ããŸãã
- ãã®ããã©ã«ãã®æ¯ãèããå€ããŠããŸããã£ã詊ãããããŸããã
- ããã¯ããã®èšå®å€ãåå ã§èµ·ããé害ã¯ã
- ãŠãŒã¶ã³ãŒãã®äžã§ãã°ãééã£ãæ¡ä»¶ã«ãªããããããã§ãã
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>on_close</literal> -
ConnectionReleaseMode.ON_CLOSEã䜿ããŸãã
- ãã®èšå®ã¯åŸæ¹äºæã®ããã«æ®ãããŠããŸããã䜿ããªãããšã匷ãå§ããŸãã
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>after_transaction</literal> -
ConnectionReleaseMode.AFTER_TRANSACTIONã䜿ããŸãã
- ãã®èšå®ã¯JTAç°å¢ã®äžã§ã¯äœ¿ãã¹ãã§ã¯ãããŸããã
- ConnectionReleaseMode.AFTER_TRANSACTIONãæå®ããèªåã³ãããã¢ãŒãã®äžã§ã¯ã
- éæŸã¢ãŒããAFTER_STATEMENTã§ãããã®ããã«ãã³ãã¯ã·ã§ã³ã¯éæŸãããããšã«æ³šæããŠãã ããã
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>after_statement</literal> -
ConnectionReleaseMode.AFTER_STATEMENTã䜿ããŸãã
- ããã«ãèšå®ããã <literal>ConnectionProvider</literal> ã¯ã
- ãã®èšå® (<literal>supportsAggressiveRelease()</literal>)
ããµããŒããããã©ãã
- ã調ã¹ãããã«äœ¿çšããŸãã
- ããããã§ãªãå ŽåãéæŸã¢ãŒãã¯ConnectionReleaseMode.AFTER_TRANSACTION
- ã«ãªã»ãããããŸãã
- ãã®èšå®ã¯æ¬¡ã®ç°å¢ã§ã®ã¿å®å
šã§ãã
- ããã¯ã<literal>ConnectionProvider.getConnection()</literal>
ãåŒã³åºããã³ã«
- åºç€ãšãªãJDBCã³ãã¯ã·ã§ã³ãåããã®ãååŸã§ãããã
- åãã³ãã¯ã·ã§ã³ãåŸãããããšãåé¡ãšãªããªãèªåã³ãããç°å¢ã®äžã§ãã
- </para>
- </listitem>
- </itemizedlist>
-
- </sect1>
-
-</chapter>
+<!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>ãã©ã³ã¶ã¯ã·ã§ã³ãšäžŠè¡æ§</title>
+
+ <para>
+ Hibernateãšåæå®è¡å¶åŸ¡ã«ã€ããŠæãéèŠãªç¹ã¯ã容æã«çè§£ã§ããããšã§ãã
+ Hibernateã¯æ°ããªããã¯ã®æ¯ãèãã远å ããŠããããçŽæ¥JDBCã³ãã¯ã·ã§ã³ãšJTAãªãœãŒã¹ã䜿çšããŸãã
+ JDBCãANSIãããã³ããŒã¿ããŒã¹ç®¡çã·ã¹ãã ïŒDBMSïŒã®ãã©ã³ã¶ã¯ã·ã§ã³åé¢ã®ä»æ§ã
+ å°ãæéããããŠå匷ããããšãåŒ·ãæšå¥šããŸãã
+ </para>
+
+ <para>
+ Hibernateã¯ã¡ã¢ãªå
ã®ãªããžã§ã¯ããããã¯ããŸããã
+ ã¢ããªã±ãŒã·ã§ã³ã¯ãããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®åé¢ã¬ãã«ã§
+ å®çŸ©ããæ¯ãèããæåŸ
ã§ããŸãã
+ ãã©ã³ã¶ã¯ã·ã§ã³ã¹ã³ãŒãã®ãã£ãã·ã¥ã§ããã <literal>Session</literal> ã®ãé°ã§ã
+ èå¥åãã¯ãšãªã«ããæ€çŽ¢ãããšã³ãã£ãã£ã¯ãªããŒã¿ãã«ãªãŒãã«ãªããŸã
+ ïŒã¹ã«ã©ãŒå€ãè¿ããããªã¬ããŒãã¯ãšãªã¯éããŸãïŒã
+ </para>
+
+ <para>
+ ããŒãžã§ãã³ã°ã«ããèªåçãªæ¥œèгçåæå®è¡å¶åŸ¡ã«å ããŠã
+ <literal>SELECT FOR UPDATE</literal> æã䜿çšããŠã
+ è¡ãæ²èгçããã¯ããããã®ïŒãã€ããŒãªïŒAPIãæäŸããŸãã
+ 楜芳çåæå®è¡å¶åŸ¡ãšãã®APIã«ã€ããŠã¯ããã®ç« ã®åŸã®ã»ãã§è°è«ããŸãã
+ </para>
+
+ <para>
+ ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãé·ã察話ïŒconversationããã³ã°ãã©ã³ã¶ã¯ã·ã§ã³ïŒã ãã§ãªãã
+
<literal>Configuration</literal>ã<literal>SessionFactory</literal>ãããã³
+ <literal>Session</literal>
+ ãšããç²åºŠã§Hibernateãè¡ãåæå®è¡å¶åŸ¡ã®è°è«ãå§ããŸãã
+ </para>
+
+ <sect1 id="transactions-basics" revision="1">
+ <title>sessionã¹ã³ãŒããštransactionã¹ã³ãŒã</title>
+
+ <para>
+ <literal>SessionFactory</literal> ã¯çæããããšãé«äŸ¡ã§ã
+ ã¹ã¬ããã»ãŒããªãªããžã§ã¯ãã§ãã
+ ãã£ãŠãã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®ã¹ã¬ããã§å
±æãã¹ãã§ãã
+ éåžžãã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«ã
+ <literal>Configuration</literal> ã€ã³ã¹ã¿ã³ã¹ããïŒåºŠã ãçæããŸãã
+ </para>
+
+ <para>
+ <literal>Session</literal> ã¯é«äŸ¡ã§ã¯ãªããã¹ã¬ããã»ãŒããªãªããžã§ã¯ãã§ããããŸããã
+ ãã£ãŠãïŒã€ã®èŠæ±ãïŒã€ã®å¯Ÿè©±ãïŒã€ã®äœæ¥åäœïŒunit of workïŒã«å¯ŸããŠïŒåºŠã ã䜿ãã
+ ãã®åŸã§æšãŠãã¹ãã§ãã
+ <literal>Session</literal> ã¯å¿
èŠã«ãªããŸã§ã
+ JDBC <literal>Connection</literal>ïŒãããã¯
<literal>DataSource</literal>ïŒãç²åŸããŸããã
+ ããã«ãå®éã«äœ¿çšãããšããŸã§ãªãœãŒã¹ãæ¶è²»ããŸããã
+ </para>
+
+ <para>
+ ãã®ç¶æ³ãå®äºãããããã«ã ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã«ã€ããŠãèããªããã°ãªããŸããã
+ ããŒã¿ããŒã¹å
ã®ããã¯ã®ç«¶åãå°ãªãããããã«ã
+ ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã¯å¯èœãªéãçãããã¹ãã§ãã
+ é·ãããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã¯ãã¢ããªã±ãŒã·ã§ã³ã®é«ã䞊åå®è¡æ§ãé»å®³ããŸãã
+ ããã«ããŠãŒã¶ãŒãèããŠããéïŒäœæ¥åäœãå®äºãããŸã§ïŒããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã
+ éãããŸãŸã«ããã®ã¯ããããŠãã®å Žåããèšèšãšã¯ãããŸããã
+ </para>
+
+ <para>
+ äœæ¥åäœãšããã¹ã³ãŒããšã¯äœã§ããããïŒ
+ ïŒã€ã®Hibernate <literal>Session</literal> ã¯ã
+ ããã€ãã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ããŸãããããšãã§ããã§ããããïŒ
+ ãŸãã¯ãã¹ã³ãŒããšäžå¯Ÿäžã®é¢ä¿ã§ããããïŒ
+ ã〠<literal>Session</literal> ãéããéããã¹ãã§ããããïŒ
+ ãããŠãããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³å¢çãã©ã®ããã«åããã®ã§ããããïŒ
+ </para>
+
+ <sect2 id="transactions-basics-uow" revision="1">
+ <title>äœæ¥åäœïŒUnit of workïŒ</title>
+
+ <para>
+ ïŒã€ç®ã¯ã<emphasis>session-per-operation</emphasis>
ã¢ã³ããã¿ãŒã³ã䜿ã£ãŠã¯ãããŸããã
+ ããªãã¡ãïŒã€ã®ã¹ã¬ããã®äžã§ãåçŽãªããŒã¿ããŒã¹åŒã³åºãã®ãã³ã«
+ <literal>Session</literal> ãéããŠãéããŠã¯ãããŸããïŒ
+ ãã¡ãããããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã«ã€ããŠãåæ§ã§ãã
+ ã¢ããªã±ãŒã·ã§ã³äžã®ããŒã¿ããŒã¹åŒã³åºãã¯ã
+ èšç»ãããã·ãŒã±ã³ã¹ïŒplanned sequenceïŒã䜿ãã
+ ã¢ãããã¯ãªäœæ¥åäœã«åé¡ãããŸãã
+ ïŒïŒã€ã®SQLæããšã«ã³ãããããèªåã³ããããã
+ 䜿ãããªããšããæå³ã§ãããããšã«æ³šæããŠãã ããã
+ èªåã³ãããã¯ãSQLã³ã³ãœãŒã«ã§ã¢ãããã¯ãªäœæ¥ãããéã«äœ¿ããã®ã§ãã
+ Hibernateã¯çŽã¡ã«èªåã³ãããã¢ãŒããç¡å¹ã«ããŸãã
+ ãããã¯ãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãç¡å¹åããããšãæåŸ
ããŸããïŒ
+ ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã¯ãªãã·ã§ã³ã§ã¯ãããŸããã
+ ããŒã¿ããŒã¹ãšã®ãã¹ãŠã®éä¿¡ã¯ãããŒã¿ã®èªã¿èŸŒã¿ã§ãã£ãŠããæžã蟌ã¿ã§ãã£ãŠãã
+ ãã©ã³ã¶ã¯ã·ã§ã³ã®äžã§è¡ããªããã°ãªããŸããã
+ 説æãããšãããŒã¿èªã¿èŸŒã¿ã«å¯ŸããŠãèªåã³ãããã¯é¿ããã¹ãã§ãã
+ ãªããªãã倿°ã®å°ããªãã©ã³ã¶ã¯ã·ã§ã³ã¯ãæç¢ºã«å®çŸ©ãããïŒã€ã®äœæ¥åäœãšæ¯ã¹ãŠã
+ ããã©ãŒãã³ã¹ããããªãããšã¯ãããŸããã
+ åŸè
ã¯ä¿å®æ§ãæ¡åŒµæ§ãããããããŠããŸãã
+ </para>
+
+ <para>
+ ãã«ããŠãŒã¶ãŒã®ã¯ã©ã€ã¢ã³ãïŒãµãŒããŒã¢ããªã±ãŒã·ã§ã³ã®äžã§ã
+ æããã䜿ããããã¿ãŒã³ã¯ã<emphasis>session-per-request</emphasis> ã§ãã
+ ãã®ã¢ãã«ã®äžã§ã¯ã
+ ã¯ã©ã€ã¢ã³ãããïŒHibernateæ°žç¶åå±€ãåäœããïŒãµãŒããŒãžãªã¯ãšã¹ããéããã
+ æ°ããHibernate <literal>Session</literal> ãéãããŸãã
+ ãããŠããã®äœæ¥åäœã®äžã§ãã¹ãŠã®ããŒã¿ããŒã¹åŠçãå®è¡ãããŸãã
+ äœæ¥ãå®äºããïŒãããŠãã¯ã©ã€ã¢ã³ããžã®ã¬ã¹ãã³ã¹ãæºåã§ããïŒæç¹ã§ã
+ session ããã©ãã·ã¥ããéããŸãã
+ ã¯ã©ã€ã¢ã³ãã®èŠæ±ãåŠçããããã«ãïŒã€ã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã䜿çšããã§ãããã
+ <literal>Session</literal> ãéããéããéã«ã
+ ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãéå§ããã³ãããããŸãã
+ äºã€ã®é¢ä¿ã¯äžå¯Ÿäžã§ãã
+ ãã®ã¢ãã«ã¯å€ãã®ã¢ããªã±ãŒã·ã§ã³ã«å®å
šã«é©åããŸãã
+ </para>
+
+
+
+ <para>
+ 以éã®å®è£
ã«ãã£ã¬ã³ãžããŠãã ããã
+ Hibernateã¯åçŽãªãã®ãã¿ãŒã³ã®ããã«ãäºãçµã¿èŸŒãŸãã
+ ãcurrent sessionãã®ç®¡çãæäŸããŸãã
+ ãµãŒããŒãªã¯ãšã¹ããåŠçããéã¯ãã©ã³ã¶ã¯ã·ã§ã³ãéå§ããªããã°ãªããŸããã
+ ãããŠãã¬ã¹ãã³ã¹ãã¯ã©ã€ã¢ã³ãã«éä¿¡ããåã«ãã©ã³ã¶ã¯ã·ã§ã³ãçµããããŸãã
+ 奜ããªæ¹æ³ã§å®çŸã§ããŸããäžè¬çãªè§£æ±ºç㯠<literal>ServletFilter</literal> ã
+ ãµãŒãã¹ã¡ãœããããã€ã³ãã«ããããŠAOPã€ã³ã¿ãŒã»ãã¿ãŒã
+ proxy/interception ã³ã³ããã§ãã
+ EJBã³ã³ããã¯EJBã»ãã·ã§ã³ããŒã³ããã©ã³ã¶ã¯ã·ã§ã³å¢çãšããŠ
+ ã¢ã¹ãã¯ããã¯ãã¹ã«ããããå®è£
ã®æšæºçãªæ¹æ³ã§ãïŒCMTã«ãã宣èšçïŒã
+ ããã°ã©ã ã«ãããã©ã³ã¶ã¯ã·ã§ã³å¢çã䜿ããšæ±ºããå Žåã
+ ç°¡åã«äœ¿ããããäºææ§ã®ããã³ãŒãã«ããããã«ã
+ ãã®ç« ã®åŸã®ã»ãã«ããHibernate <literal>Transaction</literal>
APIã®ã»ããããã§ãã
+ </para>
+
+ <para>
+ ã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒãã¯ãå¿
èŠãªãšãã«ã©ãã§ããäœåã§ãã
+ åã« <literal>sessionFactory.getCurrentSession()</literal>
ãåŒã³åºãã ãã§
+ ãçŸåšã®ã»ãã·ã§ã³ãã«ã¢ã¯ã»ã¹ã§ããŸãã
+ çŸåšã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãžã® <literal>ã»ãã·ã§ã³</literal> ãåžžã«ååŸããŸãã
+ ãªãœãŒã¹ã»ããŒã«ã«ãªç°å¢ããããã¯JTAç°å¢ãæ§æããªããã°ãªããŸãã
+ ïŒ<xref linkend="architecture-current-session"/>
ãåç
§ããŠãã ããïŒã
+ </para>
+
+ <para>
+ ãšãã©ããããã¥ãŒãæç»ããããŸã§ <literal>ã»ãã·ã§ã³</literal>
+ ãšããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®ã¹ã³ãŒããæ¡åŒµãããšäŸ¿å©ãªããšããããŸãã
+ ããã¯ãèŠæ±ã®åŠçãšæç»ã®ãã§ãŒãºãåããŠãã
+ ãµãŒãã¬ããã¢ããªã±ãŒã·ã§ã³ã«ãããŠç¹ã«åœ¹ç«ã¡ãŸãã
+ ç¬èªã®ã€ã³ã¿ãŒã»ãã¿ãå®è£
ããã°ã
+ ãã¥ãŒãæç»ãããŸã§ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãæ¡åŒµããã®ã¯ç°¡åã§ãã
+ ããããã³ã³ãã管çãã©ã³ã¶ã¯ã·ã§ã³ã®EJBã«é Œãå Žåã¯ãç°¡åã«ã¯ã§ããŸããã
+ ãªããªãããã¥ãŒã®æç»ãéå§ããåã«ãEJBã®ã¡ãœããããªã¿ãŒã³ããéã«ã
+ ãã©ã³ã¶ã¯ã·ã§ã³ãå®äºããããã§ãã
+ ãã® <emphasis>Open Session in View</emphasis>
ãã¿ãŒã³ã«é¢é£ãããã³ããšäŸã«ã€ããŠã¯ã
+ Hibernateã®Webãµã€ãããã©ãŒã©ã ãåç
§ããŠãã ããã
+ </para>
+
+ </sect2>
+
+ <sect2 id="transactions-basics-apptx" revision="1">
+ <title>é·ã察話</title>
+
+ <para>
+ session-per-requestãã¿ãŒã³ã¯ãäœæ¥åäœãèšèšããéã«åœ¹ç«ã€èããšããã ãã§ã¯ãããŸããã
+ å€ãã®ããžãã¹ããã»ã¹ã¯ããŠãŒã¶ãŒãšã®äžé£ã®çžäºäœçšå
šäœãèŠæ±ããŸãã
+ ãã®çžäºäœçšã«ã¯ãããŒã¿ããŒã¹ã¢ã¯ã»ã¹ãå«ãŸããŸãã
+
+ Webãšãšã³ã¿ãŒãã©ã€ãºã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã
+ ãŠãŒã¶ãšã®çžäºäœçšã«ãŸã§æž¡ãããšã¯èš±ãããŸããã
+
+ 次ã®äŸãããèããŠã¿ãŠãã ããã
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ ãã€ã¢ãã°ã®æåã®ç»é¢ãéããåã
ã® <literal>Session</literal>
+ ãšããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®äžã§ããŒããããããŒã¿ããŠãŒã¶ãŒã«èŠããŸãã
+ ãŠãŒã¶ãŒã¯ãªããžã§ã¯ããèªç±ã«ä¿®æ£ã§ããŸãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ 5ååŸã«ãŠãŒã¶ãŒã¯ãSaveããã¯ãªãã¯ããä¿®æ£ãæ°žç¶åãããã®ãæåŸ
ããŸãã
+ ãŸãããã®æ
å ±ãç·šéããã®ã¯èªåïŒäººã ãã§ã
+ ä¿®æ£ã®ã³ã³ããªã¯ãã¯çºçããªããšæåŸ
ããŸãã
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ ãã®äœæ¥åäœãïŒãŠãŒã¶ãŒã®èŠç¹ã§ïŒé·æã® <emphasis>察話</emphasis>
+ ïŒãããã¯ã<emphasis>ã¢ããªã±ãŒã·ã§ã³ãã©ã³ã¶ã¯ã·ã§ã³</emphasis> ïŒãšåŒã³ãŸãã
+ ã¢ããªã±ãŒã·ã§ã³ã«ãããå®è£
ããæ¹æ³ã¯ãããããããŸãã
+ </para>
+
+ <para>
+ æåã«æãã€ãå®è£
ã¯ããŠãŒã¶ãŒãèããŠããéã<literal>Session</literal>
+ ãšããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãéãããŸãŸã«ããŠããããšã§ãã
+ åæã«ä¿®æ£ããããåé¢ãšååæ§ãä¿èšŒãããããã«ã
+ ããŒã¿ããŒã¹å
ã®ããã¯ã¯ä¿æãããŸãŸã«ããŸãã
+ ãã¡ãããããã¯ã¢ã³ããã¿ãŒã³ã§ãã
+ ãªããªããããã¯ã®ç«¶åãçºçãããšã
+ ã¢ããªã±ãŒã·ã§ã³ãåæãŠãŒã¶ãŒæ°ã«å¿ããŠã¹ã±ãŒã«ã¢ããã§ããªããªãããã§ãã
+ </para>
+
+ <para>
+ æããã«ã察話ãå®è£
ããããã«ã¯ã
+ ããã€ãã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã䜿çšããã¹ãã§ãã
+ ãã®å Žåãããžãã¹ããã»ã¹ã®åé¢ãç¶æããããšã¯ã
+ ã¢ããªã±ãŒã·ã§ã³å±€ã®è²¬åã®ïŒã€ã«ãªããŸãã
+ ïŒã€ã®å¯Ÿè©±ã¯ã
+ éåžžããã€ãã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã«åã³ãŸãã
+ ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®ïŒã€ã®ã¿ïŒæåŸã®ïŒã€ïŒãæŽæ°ããããŒã¿ãä¿åãã
+ ä»ã¯ããŒã¿ãèªãã ãã§ããã°ãããã¯ã¢ãããã¯ã§ã
+ ïŒäŸãã°ãããã€ãã®èŠæ±ïŒå¿çãç¹°ãè¿ããŠã£ã¶ãŒã圢åŒã®ãã€ã¢ãã°ïŒã
+ ããã¯èããããå®è£
ããã»ããç°¡åã§ãã
+ Hibernateã®æ©èœã䜿ãã®ã§ããã°ãç¹ã«ç°¡åã§ãã
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ <emphasis>èªåããŒãžã§ãã³ã°</emphasis>
+ - Hibernateã¯èªåçã«æ¥œèгçåæå®è¡å¶åŸ¡ãã§ããŸãã
+ ãŠãŒã¶ãŒãèããŠããéã«åæã«ä¿®æ£ããããå Žåãèªåçã«æ€åºã§ããŸãã
+ éåžžã察話ã®çµäºæã«ãã§ãã¯ããã ãã§ãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <emphasis>åé¢ïŒDetachedïŒãªããžã§ã¯ã</emphasis> - ãã§ã«è°è«ãã
+ <emphasis>session-per-request</emphasis>
ãã¿ãŒã³ã䜿ããšæ±ºå®ããå Žåã
+ ããŒãããããã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã¯ããŠãŒã¶ãèããŠããéã¯ã
+ ã»ãã·ã§ã³ããåé¢ãããç¶æ
ã«ãªããŸãã
+ ãªããžã§ã¯ããã»ãã·ã§ã³ã«å远å ããä¿®æ£ãæ°žç¶åã§ããŸãã
+ ããã
<emphasis>session-per-request-with-detached-objects</emphasis>
+ ãã¿ãŒã³ãšåŒã³ãŸãã
+ èªåããŒãžã§ãã³ã°ã䜿ãããšã§ãåæã«è¡ãããä¿®æ£ãåé¢ã§ããŸãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <emphasis>æ¡åŒµïŒãããã¯ãé·ãïŒã»ãã·ã§ã³</emphasis>
+ - Hibernateã® <literal>Session</literal> ã¯ã
+ ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãã³ãããããåŸã
+ è£ã§çµã³ã€ããŠããJDBCã³ãã¯ã·ã§ã³ãåæã§ããŸãã
+ ãããŠãã¯ã©ã€ã¢ã³ãããã®æ°ããèŠæ±ãçºçããéã«ã忥ç¶ã§ããŸãã
+
ãã®ãã¿ãŒã³ã¯ã<emphasis>session-per-conversation</emphasis>
+ ãšããåã§ç¥ãããŠããããªããžã§ã¯ããã»ãã·ã§ã³ãžå远å ããããšããäžèŠã«ããŸãã
+ èªåããŒãžã§ãã³ã°ã䜿ãããšã§ãåæã«è¡ãããä¿®æ£ãåé¢ã§ããŸãã
+
+ éåžž <literal>Session</literal> ãèªåçã«ãã©ãã·ã¥ãããã
+ æç€ºçã«ãã©ãã·ã¥ããŸãã
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+
<emphasis>session-per-request-with-detached-objects</emphasis> ãš
+ <emphasis>session-per-conversation</emphasis> ã®ïŒã€ã¯ã
+ å©ç¹ã𿬠ç¹ãæã£ãŠããŸãã
+ ããã«ã€ããŠã¯ããã®ç« ã®åŸã®ã»ãã§ã楜芳çåæå®è¡å¶åŸ¡ã®æèã®äžã§è°è«ããŸãã
+ </para>
+
+ </sect2>
+
+ <sect2 id="transactions-basics-identity">
+ <title>ãªããžã§ã¯ãèå¥åãèãã</title>
+
+ <para>
+ ã¢ããªã±ãŒã·ã§ã³ã¯ãïŒã€ã®ç°ãªã <literal>Session</literal> ãã
+ åãæ°žç¶ç¶æ
ã«åæã«ã¢ã¯ã»ã¹ã§ããŸãã
+ ããããïŒã€ã® <literal>Session</literal> ã€ã³ã¹ã¿ã³ã¹ã
+ æ°žç¶æ§ã¯ã©ã¹ã®ïŒã€ã®ã€ã³ã¹ã¿ã³ã¹ãå
±æããããšã¯ã§ããŸããã
+ ããã«ãèå¥åã«ã¯ïŒã€ã®ç°ãªãæŠå¿µããããšããããšã«ãªããŸãã
+ </para>
+
+ <variablelist spacing="compact">
+ <varlistentry>
+ <term>ããŒã¿ããŒã¹èå¥å</term>
+ <listitem>
+ <para>
+ <literal>foo.getId().equals( bar.getId()
)</literal>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>JVMèå¥å</term>
+ <listitem>
+ <para>
+ <literal>foo==bar</literal>
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ <emphasis>åã
ã®</emphasis>
<literal>Session</literal> ã«è¿œå ããããªããžã§ã¯ãã«ãšã£ãŠ
+ ïŒããªãã¡ãïŒã€ã® <literal>Session</literal> ã®ã¹ã³ãŒãã®äžã§ã¯ïŒãïŒã€ã®æŠå¿µã¯åãã§ãã
+ ããŒã¿ããŒã¹åäžæ§ãšJVMåäžæ§ãäžèŽããããšããHibernateãä¿èšŒããŸãã
+ ããããã¢ããªã±ãŒã·ã§ã³ãïŒã€ã®ç°ãªãã»ãã·ã§ã³ãã
+ ãåããïŒæ°žç¶æ§èå¥åã®ïŒããžãã¹ãªããžã§ã¯ãã«åæã«ã¢ã¯ã»ã¹ããéãã
+ ïŒã€ã®ã€ã³ã¹ã¿ã³ã¹ã¯å®éã«ïŒJVMèå¥åãïŒãç°ãªãããŸãã
+ 楜芳çã¢ãããŒãã«ãã£ãŠãïŒèªåããŒãžã§ãã³ã°ã®ïŒãã©ãã·ã¥ïŒã³ãããæã«
+ ã³ã³ããªã¯ãã解決ãããŸãã
+ </para>
+
+ <para>
+ ãã®ã¢ãããŒãã§ã¯ãHibernateãšããŒã¿ããŒã¹ã«åæå®è¡ã«ã€ããŠã®å¿é
ãæ®ããŸãã
+ äžæ¹ã§ãæé«ã®ã¹ã±ãŒã©ããªãã£ãæäŸãããŸãã
+ ãªããªããïŒã¹ã¬ããã®äœæ¥åäœã®äžã§äžææ§ãä¿èšŒãããã°ã
+ é«äŸ¡ãªããã¯ãåæåãäžèŠã«ãªãããã§ãã
+ <literal>Session</literal> ããšã«ïŒã€ã®ã¹ã¬ããã貌ãä»ããéãã
+ ã¢ããªã±ãŒã·ã§ã³ã¯ããžãã¹ãªããžã§ã¯ããsynchronizeããå¿
èŠã¯ãããŸããã
+ <literal>Session</literal> å
ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯ãªããžã§ã¯ããæ¯èŒããããã«ã
+ <literal>==</literal> ãå®å
šã«äœ¿çšã§ããŸãã
+ </para>
+
+ <para>
+ ããã©ãã<literal>Session</literal> ã®å€ã§
<literal>==</literal>
+ ã䜿ãã¢ããªã±ãŒã·ã§ã³ã¯ãäºæããªãçµæã«ééããŸãã
+ ããã¯äºæããªãå Žæã§èµ·ããããŸãã
+ äŸãã°ãïŒã€ã®åé¢ã€ã³ã¹ã¿ã³ã¹ãåã <literal>Set</literal> ã«
+ putãããšããªã©ã§ãã
+ äž¡æ¹ãšãåãããŒã¿ããŒã¹èå¥åãæã¡ãŸãïŒããªãã¡ãåãè¡ã衚ããŸãïŒã
+ ããããåé¢ç¶æ
ã®ã€ã³ã¹ã¿ã³ã¹ã®JVMèå¥åã¯åœç¶ä¿èšŒãããŸããã
+ éçºè
ã¯ãæ°žç¶æ§ã¯ã©ã¹ã® <literal>equals()</literal> ãš
<literal>hashCode()</literal>
+ ã¡ãœããããªãŒããŒã©ã€ããããªããžã§ã¯ãç䟡æ§ã®æŠå¿µãå®è£
ãã¹ãã§ãã
+ èŠåãïŒã€ãããŸããç䟡æ§ã®å®è£
ã«ããŒã¿ããŒã¹èå¥åã䜿ããªãã§ãã ããã
+ ãŠããŒã¯ãªïŒæ®éã¯äžå€ã®ïŒå±æ§ã®çµã¿åããã§ããããžãã¹ããŒã䜿ã£ãŠãã ããã
+ ãããäžæãªããžã§ã¯ããæ°žç¶åãããå ŽåãããŒã¿ããŒã¹èå¥åãå€ãããŸãã
+ äžæãªããžã§ã¯ããïŒéåžžåé¢ã€ã³ã¹ã¿ã³ã¹ãšå
±ã«ïŒ <literal>Set</literal>
+ ã«ä¿æããå Žåãããã·ã¥ã³ãŒããå€ãããšããããšã¯ã<literal>Set</literal>
+ ã®å¥çŽãç Žããšããããšã§ãã
+ ããžãã¹ããŒã®ããã®å±æ§ã¯ãããŒã¿ããŒã¹ã®äž»ããŒã»ã©å®å®ãã¹ãã§ã¯ãªãã§ãã
+ ãªããžã§ã¯ããåã <literal>Set</literal> ã®äžã«ããéã ããå®å®ãä¿èšŒãã¹ãã§ãã
+ ãã®åé¡ã®ãã培åºçãªè°è«ã¯ãHibernateã®Webãµã€ããåç
§ããŠãã ããã
+ ãŸããããã¯Hibernateã®åé¡ã§ã¯ãªããåã«Javaãªããžã§ã¯ãã®èå¥åãç䟡æ§ã
+ ã©ã®ããã«å®è£
ãã¹ãããšããããšã§ãã
+ </para>
+
+ </sect2>
+
+ <sect2 id="transactions-basics-issues">
+ <title>äžè¬çãªåé¡</title>
+
+ <para>
+ <emphasis>session-per-user-session</emphasis> ãš
+ <emphasis>session-per-application</emphasis> ã¢ã³ããã¿ãŒã³
+ ã¯äœ¿ã£ãŠã¯ãããŸããïŒãã¡ããããŸãã«äŸå€ããããŸãïŒã
+ 泚æïŒäžèšã®åé¡ã®ããã€ãã¯ãæšå¥šããããã¿ãŒã³ãšããŠãåºçŸããŸãã
+ èšèšã決å®ããåã«ãè£ã®æå³ãçè§£ããããã«ããŠãã ããã
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ <literal>Session</literal> ã¯ã¹ã¬ããã»ãŒãã§ã¯ãããŸããã
+ HTTPãªã¯ãšã¹ããã»ãã·ã§ã³BeanãSwingã¯ãŒã«ãŒã®ããã«ã
+ åæå®è¡ãå¯èœãªãã®ã <literal>Session</literal> ã€ã³ã¹ã¿ã³ã¹ãå
±æãããšã
+ ç«¶åç¶æ
ãåŒãèµ·ãããŸãã
+ ïŒåŸã§è°è«ããïŒ<literal>HttpSession</literal> ã®äžã§
+ Hibernate <literal>Session</literal> ãä¿æããå Žåã
+ HttpSessionãžã®ã¢ã¯ã»ã¹ãåæåããããšãèæ
®ãã¹ãã§ãã
+ ãããªããã°ããŠãŒã¶ãŒãååæ©ããªããŒããã¯ãªãã¯ãããšã
+ åæã«èµ°ãïŒã€ã®ã¹ã¬ããã®äžã§ãåã <literal>Session</literal>
ã䜿ãããŸãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ HibernateãäŸå€ãæããå Žåã¯ãããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ããã¯ãã
+ çŽã¡ã« <literal>Session</literal> ãéããã¹ãã§ãïŒè©³çްãåŸã§è°è«ããŸãïŒã
+ <literal>Session</literal> ãã¢ããªã±ãŒã·ã§ã³ã«çµã³ä»ããããŠããã®ã§ããã°ã
+ ã¢ããªã±ãŒã·ã§ã³ã忢ãã¹ãã§ãã
+ ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ããã¯ããŠããããžãã¹ãªããžã§ã¯ãã¯
+ ãã©ã³ã¶ã¯ã·ã§ã³ãéå§ãããšãã®ç¶æ
ã«æ»ããŸããã
+ ããã¯ãããŒã¿ããŒã¹ã®ç¶æ
ãšããžãã¹ãªããžã§ã¯ãã¯åæããŠããªãããšãæå³ããŸãã
+ éåžžããã¯åé¡ã«ãªããŸããã
+ ãªããªããäŸå€ã¯å埩ã§ããªãããã§ãã
+ ãšã«ããããŒã«ããã¯ããåŸã«ããçŽãã¹ãã§ãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>Session</literal>
ã¯æ°žç¶ïŒpersistentïŒç¶æ
ã®ãã¹ãŠã®ãªããžã§ã¯ãã
+ ãã£ãã·ã¥ããŸãïŒHibernateã¯ç£èŠããããŒãã£ç¶æ
ããã§ãã¯ããŸãïŒã
+ ããã¯ãé·ãéã»ãã·ã§ã³ãéãããŸãŸã«ãããã
+ éåžžã«å€ãã®ããŒã¿ãããŒããç¶ãããããå Žåã¯ã
+ OutOfMemoryExceptionãçºçãããŸã§ç¡éã«å€§ãããªãããšãæå³ããŸãã
+ 解決çã®ïŒã€ã¯ã<literal>Session</literal> ãã£ãã·ã¥ã管çããããã«ã
+ <literal>clear()</literal> ã
<literal>evict()</literal> ãåŒã¶ããšã§ãã
+ ãããã倧ããªããŒã¿ãåŠçããå¿
èŠããããªãã
+ ãã¶ãã¹ãã¢ãããã·ãŒãžã£ãèæ
®ããã¹ãã§ãããã
+ ããã€ãã®è§£æ±ºçã¯ã<xref linkend="batch"/> ã§ç޹ä»ãããŠããŸãã
+ ãŠãŒã¶ãŒã»ãã·ã§ã³ã®éã<literal>Session</literal>
ãéãããŸãŸã«ãããšããããšã¯ã
+ ããŒã¿ãæ°é®®ã§ãªããªã確çãé«ããªãããšãæå³ããŸãã
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </sect2>
+
+ </sect1>
+
+ <sect1 id="transactions-demarcation">
+ <title>ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³å¢ç</title>
+
+ <para>
+ ããŒã¿ããŒã¹ïŒãããã¯ã·ã¹ãã ïŒãã©ã³ã¶ã¯ã·ã§ã³ã®å¢çã¯ãåžžã«å¿
èŠã§ãã
+ ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®å€ã§ãããŒã¿ããŒã¹ãšã®éä¿¡ã¯èµ·ããŸãã
+ ïŒããã¯èªåã³ãããã¢ãŒãã«æ
£ããŠããå€ãã®éçºè
ãæ··ä¹±ããããããããŸããïŒã
+ èªã¿èŸŒãã ãã®æäœã«ã§ãããã€ãæç¢ºãªãã©ã³ã¶ã¯ã·ã§ã³å¢çã䜿çšããŠãã ããã
+ åé¢ã¬ãã«ãšããŒã¿ããŒã¹ã®èœå次第ã§ãããã¯å¿
èŠãªããããããŸãããã
+ åžžã«ãã©ã³ã¶ã¯ã·ã§ã³å¢çãæç€ºçã«æå®ããŠãããã€ãã¹é¢ã¯å
šããããŸããã
+
+ 確ãã«ãïŒã€ã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã¯å€æ°ã®å°ããªãã©ã³ã¶ã¯ã·ã§ã³ãã
+ ïŒããŒã¿ã®èªã¿èŸŒã¿ã§ãã£ãŠãïŒããã©ãŒãã³ã¹ãããããŠããŸãã
+ </para>
+
+ <para>
+ J2EEç°å¢ã«ç®¡çãããŠããªãç¶æ
+ ïŒããªãã¡ãã¹ã¿ã³ãã¢ãã³ãåçŽãªWebãSwingã¢ããªã±ãŒã·ã§ã³ïŒã§ãã
+ 管çãããç¶æ
ã§ããHibernateã¢ããªã±ãŒã·ã§ã³ãå®è¡ã§ããŸãã
+ 管çãããŠããªãç°å¢ã§ã¯ãHiberanteãããŒã¿ããŒã¹ã®ã³ãã¯ã·ã§ã³ããŒã«ãæäŸããŸãã
+ ã¢ããªã±ãŒã·ã§ã³éçºè
ã¯ããã©ã³ã¶ã¯ã·ã§ã³å¢çãæåã§èšå®ããªããã°ãªããŸããã
+ èšãæãããšãããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®éå§ãã³ããããããŒã«ããã¯ã
+ éçºè
èªèº«ãèšå®ããå¿
èŠããããšããããšã§ãã
+
+ éåžžã管çãããç°å¢ã§ã¯ãã³ã³ãã管çã«ãããã©ã³ã¶ã¯ã·ã§ã³ïŒCMTïŒãæäŸãããŸãã
+ äŸãã°ãã»ãã·ã§ã³Beanã®ãããã€ã¡ã³ããã£ã¹ã¯ãªãã¿ã§å®£èšçã«å®çŸ©ãã
+ ãã©ã³ã¶ã¯ã·ã§ã³ãçµã¿ç«ãŠãŸãã
+ ããã°ã©ã ã«ãããã©ã³ã¶ã¯ã·ã§ã³å¢çã¯ããå¿
èŠãããŸããã
+ </para>
+
+ <para>
+ ããããªããã管çãããŠããªããªãœãŒã¹ã»ããŒã«ã«ãªç°å¢ãš
+ JTAã«äŸåããã·ã¹ãã ïŒCMTã§ã¯ãªãBMTïŒã®äž¡æ¹ã«ã
+ æ°žç¶åå±€ãããŒã¿ãã«ã«ä¿ã€ã®ã¯ããã°ãã°æãŸããããšã§ãã
+
+ ãããã€ç°å¢ã®ãã€ãã£ãã®ãã©ã³ã¶ã¯ã·ã§ã³ã·ã¹ãã ãåŒã³åºã
+ <literal>Transaction</literal> ãšããã©ãããŒAPIãHibernateãæäŸããŸãã
+ ãã®APIã䜿ããã¯ä»»æã§ãããCMTã®ã»ãã·ã§ã³Beanã䜿ããªãã®ã§ããã°ã䜿ãããšãåŒ·ãæšå¥šããŸãã
+ </para>
+
+ <para>
+ éåžžã<literal>Session</literal> çµäºã¯ãïŒã€ã®ç°ãªããã§ãŒãºãå«ã¿ãŸãã
+ </para>
+
+ <itemizedlist spacing="compact">
+ <listitem>
+ <para>
+ ã»ãã·ã§ã³ã®ãã©ãã·ã¥
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ ãã©ã³ã¶ã¯ã·ã§ã³ã®ã³ããã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ ã»ãã·ã§ã³ã®ã¯ããŒãº
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ äŸå€ã®ãã³ããªã³ã°
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ ã»ãã·ã§ã³ã®ãã©ãã·ã¥ã«ã€ããŠã¯ãåã®ã»ãã§ãã§ã«è°è«ããŸããã
+ 管çãããç°å¢ãšç®¡çãããŠããªãç°å¢ã®äž¡æ¹ã«ã€ããŠã
+ ãã©ã³ã¶ã¯ã·ã§ã³å¢çãšäŸå€ãã³ããªã³ã°ããã£ãšè©³ããèŠãŠãããŸãããã
+ </para>
+
+
+ <sect2 id="transactions-demarcation-nonmanaged"
revision="2">
+ <title>管çãããŠããªãç°å¢</title>
+
+ <para>
+ Hibernateæ°žç¶åå±€ã管çãããŠããªãç°å¢ã§å®è£
ããå Žåã¯ã
+
+ éåžžåçŽãªã³ãã¯ã·ã§ã³ããŒã«ïŒããªãã¡DataSourceã§ã¯ãªãïŒã«ãã£ãŠã
+ ããŒã¿ããŒã¹ã³ãã¯ã·ã§ã³ãå¶åŸ¡ããŸãã
+ Hibernateã¯ãã®ã³ãã¯ã·ã§ã³ããŒã«ããå¿
èŠãªã³ãã¯ã·ã§ã³ãååŸããŸãã
+
+ ã»ãã·ã§ã³ïŒãã©ã³ã¶ã¯ã·ã§ã³å¶åŸ¡ã®ã€ãã£ãªã ã¯æ¬¡ã®ããã«ãªããŸãã
+ </para>
+
+ <programlisting><![CDATA[// Non-managed environment idiom
+Session sess = factory.openSession();
+Transaction tx = null;
+try {
+ tx = sess.beginTransaction();
+
+ // do some work
+ ...
+
+ tx.commit();
+}
+catch (RuntimeException e) {
+ if (tx != null) tx.rollback();
+ throw e; // or display error message
+}
+finally {
+ sess.close();
+}]]></programlisting>
+
+ <para>
+ æç€ºçã« <literal>Session</literal> ã®
<literal>flush()</literal> ãåŒã³åºãã¹ãã§ã¯ãªãã
+ <literal>commit()</literal> ãåŒã³åºãããšã«ãããèªåçã«åæååŠçãå®è¡ãããŸã
+ ïŒã»ãã·ã§ã³ã® <xref
linkend="objectstate-flushing">FlushMode</xref> ã«äŸåããŠããïŒã
+
+ <literal>close()</literal> ãåŒã³åºãããšã«ãããã»ãã·ã§ã³ã®çµãããæç¢ºã«ããŸãã
+ <literal>close()</literal> ãæé»çã«è¡ãäž»ãªããšã¯ã
+ ã»ãã·ã§ã³ãJDBCã³ãã¯ã·ã§ã³ãéæŸããããšã§ãã
+
+ äžèšã®Javaã³ãŒãã¯ããŒã¿ãã«ã§ããã管çãããŠããªãç°å¢ãšJTAç°å¢ã®äž¡æ¹ã§å®è¡ã§ããŸãã
+ </para>
+
+ <para>
+ ããé©å¿æ§ã®ãã解決çã¯ãHibernateã«äºãçµã¿èŸŒãŸããŠãã
+ ãcurrent sessionãã³ã³ããã¹ã管çã§ãã
+ èšèã§èª¬æããããäžèšãèŠãã»ããéãã§ãããã
+ </para>
+
+ <programlisting><![CDATA[// Non-managed environment idiom with
getCurrentSession()
+try {
+ factory.getCurrentSession().beginTransaction();
+
+ // do some work
+ ...
+
+ factory.getCurrentSession().getTransaction().commit();
+}
+catch (RuntimeException e) {
+ factory.getCurrentSession().getTransaction().rollback();
+ throw e; // or display error message
+}]]></programlisting>
+
+ <para>
+ æ£èŠã®ã¢ããªã±ãŒã·ã§ã³ã®äžã§ã¯ããã®ãããªã³ãŒãã®åãç«¯ãæ±ºããŠèŠãªãã§ãããã
+ èŽåœçãªïŒã·ã¹ãã ïŒäŸå€ã¯ãåžžã«ãæäžäœãã§ãã£ãããã¹ãã§ãã
+ èšãæããã°ãïŒæ°žç¶åå±€ã§ïŒHibernateåŒã³åºããå®è¡ããã³ãŒããšã
+ <literal>RuntimeException</literal> ãå¶åŸ¡ãã
+ ïŒéåžžã¯ã¯ãªãŒã³ã¢ãããšçµäºã®ã¿è¡ãããšãã§ããïŒã³ãŒãã¯ãå¥ã
ã®å±€ã®äžã«ãããŸãã
+ Hibernateã«ããã«ã¬ã³ãã³ã³ããã¹ã管çã¯ããã®èšèšãããªãåçŽã«ããŸãã
+ å¿
èŠãªã®ã¯ã<literal>SessionFactory</literal> ã«ã¢ã¯ã»ã¹ããããšã ãã§ãã
+ äŸå€åŠçã¯ããã®ç« ã®åŸã®ã»ãã§è°è«ããŸãã
+ </para>
+
+ <para>
+ 泚æïŒïŒããã©ã«ãã§ããïŒ
+
<literal>org.hibernate.transaction.JDBCTransactionFactory</literal>
+ ãéžæããã¹ãã§ãã
+ 第2ã®çšäŸãšããŠã¯ã
+ <literal>hibernate.current_session_context_class</literal> ã
+ <literal>"thread"</literal> ãšãããšããã§ãããã
+ </para>
+
+ </sect2>
+
+ <sect2 id="transactions-demarcation-jta" revision="3">
+ <title>JTAã䜿çšãã</title>
+
+ <para>
+ æ°žç¶åå±€ãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒïŒäŸãã°ãEJBã»ãã·ã§ã³Beanã®èåŸïŒã§å®è¡ããå Žåã
+ HibernateããååŸãããã¹ãŠã®ããŒã¿ãœãŒã¹ã³ãã¯ã·ã§ã³ã¯ã
+ èªåçã«ã°ããŒãã«JTAãã©ã³ã¶ã¯ã·ã§ã³ã®äžéšã«ãªããŸãã
+
+ EJBã䜿ããã«ãã¹ã¿ã³ãã¢ãã³ã®JTAå®è£
ãå°å
¥ããããšãã§ããŸãã
+ JTAçµ±åã®ããã«ãHibernateã¯ïŒã€ã®æŠç¥ãæäŸããŸãã
+ </para>
+
+ <para>
+ Bean管çãã©ã³ã¶ã¯ã·ã§ã³ïŒBMTïŒã䜿ãã<literal>Transaction</literal>
APIã䜿ãå Žåã
+ Hibernateã¯ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã«BMTãã©ã³ã¶ã¯ã·ã§ã³ã®éå§ãšçµãããåããŸãã
+ ããªãã¡ããã©ã³ã¶ã¯ã·ã§ã³ç®¡çã®ã³ãŒãã¯ã管çãããªãç°å¢ãšåãã«ãªããŸãã
+ </para>
+
+ <programlisting><![CDATA[// BMT idiom
+Session sess = factory.openSession();
+Transaction tx = null;
+try {
+ tx = sess.beginTransaction();
+
+ // do some work
+ ...
+
+ tx.commit();
+}
+catch (RuntimeException e) {
+ if (tx != null) tx.rollback();
+ throw e; // or display error message
+}
+finally {
+ sess.close();
+}]]></programlisting>
+
+ <para>
+ ãã©ã³ã¶ã¯ã·ã§ã³å¢çãšã㊠<literal>Session</literal> ã䜿ãããå Žåã
+ ç°¡åã«ã³ã³ããã¹ããäŒæããæ©èœã§ãã <literal>getCurrentSession()</literal>
ãããã®ã§ã
+ JTAã® <literal>UserTransaction</literal> APIãçŽæ¥äœ¿çšãã¹ãã§ãããã
+ </para>
+
+ <programlisting><![CDATA[// BMT idiom with getCurrentSession()
+try {
+ UserTransaction tx = (UserTransaction)new InitialContext()
+ .lookup("java:comp/UserTransaction");
+
+ tx.begin();
+
+ // Do some work on Session bound to transaction
+ factory.getCurrentSession().load(...);
+ factory.getCurrentSession().persist(...);
+
+ tx.commit();
+}
+catch (RuntimeException e) {
+ tx.rollback();
+ throw e; // or display error message
+}]]></programlisting>
+
+ <para>
+ CMTã§ã¯ããã©ã³ã¶ã¯ã·ã§ã³å¢çãã»ãã·ã§ã³Beanã®ãããã€ã¡ã³ããã£ã¹ã¯ãªãã¿ã§å®çŸ©ãã
+ ããã°ã©ã ã§ã¯è¡ããŸããã
+ ããã«ãã³ãŒãã¯æ¬¡ã®ããã«å°ãªããªããŸãã
+ </para>
+
+ <programlisting><![CDATA[// CMT idiom
+ Session sess = factory.getCurrentSession();
+
+ // do some work
+ ...
+]]></programlisting>
+
+ <para>
+ CMT/EJBã®äžã§ã¯ãåžžã«ããŒã«ããã¯ãèªåçã«å®æœãããŸãã
+ ãªããªããã»ãã·ã§ã³ããŒã³ã®ã¡ãœããã«ããæããããå¶åŸ¡ãããŠããªã
+ <literal>RuntimeException</literal> ã¯ãã°ããŒãã«ãã©ã³ã¶ã¯ã·ã§ã³ã
+ ããŒã«ããã¯ããããã«ã³ã³ããã«äŒããããã§ãã
+ <emphasis>ããã¯ãBMTãããã¯CMTãšãã£ããã«Hibernate
<literal>Transaction</literal>
+ APIã䜿ãå¿
èŠã¯å°ãããªããšããæå³ã§ãã</emphasis>
+ </para>
+
+ <para>
+ Hibernateã®ãã©ã³ã¶ã¯ã·ã§ã³ãã¡ã¯ããªãèšå®ããéã«ã
+ JTAãçŽæ¥äœ¿ãïŒBMTã®ïŒå Žåã¯
<literal>org.hibernate.transaction.JTATransactionFactory</literal> ãã
+ CMTã»ãã·ã§ã³ããŒã³ã®äžã§ã¯
<literal>org.hibernate.transaction.CMTTransactionFactory</literal> ã
+ éžæãã¹ãã ãšããããšã«æ³šæããŠãã ããã
+
<literal>hibernate.transaction.manager_lookup_class</literal>
+ ãã»ããããããšãæãåºããŠãã ããã
+ ãªãã<literal>hibernate.current_session_context_class</literal>
ã¯ã
+ ã»ããããªããïŒåŸæ¹äºæïŒã<literal>"jta"</literal> ãã»ããããŠãã ããã
+ </para>
+
+ <para>
+ <literal>getCurrentSession()</literal>
ãªãã¬ãŒã·ã§ã³ã¯ãJTAç°å¢ã§ã¯ïŒã€ã®æ¬ ç¹ãæã¡ãŸãã
+
+ ããã©ã«ãã§äœ¿ããã <literal>after_statement</literal>
ã³ãã¯ã·ã§ã³ãªãªãŒã¹ã¢ãŒãã䜿çšããäžã§ã
+ èŠåãïŒã€ãããŸãã
+
+ JTA仿§ã®æããªå¶çŽã®ããã«ã
+ <literal>scroll()</literal> ãŸãã¯
<literal>iterate()</literal> ãè¿ããã
+ éããããŠããªã <literal>ScrollableResults</literal> ãŸãã¯
<literal>Iterator</literal>
+ ã€ã³ã¹ã¿ã³ã¹ãHibernateãèªåçã«ã¯ãªãŒã³ã¢ããããããšã¯ã§ããŸããã
+
+ <literal>finally</literal> ãããã¯ã®äžã§ã
+ <literal>ScrollableResults.close()</literal> ãŸãã¯
+ <literal>Hibernate.close(Iterator)</literal> ãæç€ºçã«åŒã³åºããŠã
+ è£ã«æœãã ããŒã¿ããŒã¹ã«ãŒãœã«ãè§£æŸ <emphasis>ããªããã°ãªããŸãã</emphasis>ã
+
+ ïŒãã¡ãããå€ãã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãJTAãCMTã³ãŒãã§ <literal>scroll()</literal>
+ ã <literal>iterate()</literal> ã®äœ¿çšãé¿ããã®ã¯å®¹æã§ããïŒ
+ </para>
+
+ </sect2>
+
+ <sect2 id="transactions-demarcation-exceptions">
+ <title>äŸå€ãã³ããªã³ã°</title>
+
+ <para>
+ <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>
ã¯ãHibernateæ°žç¶åå±€ã®äžã§çºçããå€ãã®ãšã©ãŒã
+ ã©ãããããæ€æ»ãããªãäŸå€ã§ãïŒHibernateã®å€ãããŒãžã§ã³ã¯éããŸããïŒã
+ ç§ãã¡ã®æèŠã¯ãã¢ããªã±ãŒã·ã§ã³éçºè
ã«å埩äžå¯èœãªäŸå€ã
+ äžå±€ã§ãã£ããããããšã匷èŠãã¹ãã§ã¯ãªããšããããšã§ãã
+ å€ãã®ã·ã¹ãã ã§ã¯ãæ€æ»ãããªãäŸå€ãšèŽåœçãªäŸå€ã¯ã
+ ã³ãŒã«ã¹ã¿ãã¯ã®æåã®ãã¬ãŒã ã®ïŒã€ïŒäŸãã°ãæäžäœã®å±€ã§ïŒã§ãã³ããªã³ã°ãã
+ ãšã©ãŒã¡ãã»ãŒãžãã¢ããªã±ãŒã·ã§ã³ãŠãŒã¶ãŒã«è¡šç€ºããŸã
+ ïŒãããã¯ãä»ã®é©åãªåŠçã宿œããŸãïŒã
+ Hibernateã¯ã<literal>HibernateException</literal>
以å€ã®æ€æ»ãããªãäŸå€ã
+ æããããšã«æ³šæããŠãã ããã
+ ãããããŸããå埩äžå¯èœã§ãããé©åãªåŠçã宿œãã¹ãã§ãã
+ </para>
+
+ <para>
+ 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> -
+ åºç€ãšãªãJDBCéä¿¡ã®ãšã©ãŒã衚ããŸãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>SQLGrammarException</literal> -
+ çºè¡ããSQLã®ææ³ãããã¯æ§æã®åé¡ã衚ããŸãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>ConstraintViolationException</literal> -
+ äœããã®åœ¢åŒã®å®å
šæ§å¶çŽéåã衚ããŸãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>LockAcquisitionException</literal> -
+ èŠæ±ãããæäœã宿œããã®ã«å¿
èŠãªããã¯ã¬ãã«ãåŸãéã®ãšã©ãŒã衚ããŸãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>GenericJDBCException</literal> -
+ ä»ã®ã«ããŽãªã«äžèŽããªãã£ãäžè¬çãªäŸå€ã§ãã
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </sect2>
+
+ <sect2 id="transactions-demarcation-timeout">
+ <title>ãã©ã³ã¶ã¯ã·ã§ã³ã®ã¿ã€ã ã¢ãŠã</title>
+
+ <para>
+ EJBã®ãããªç®¡çãããç°å¢ãæäŸããããããŠéèŠãªç¹åŸŽã®ïŒã€ã¯ã
+ ãã©ã³ã¶ã¯ã·ã§ã³ã®ã¿ã€ã ã¢ãŠãã§ãã
+ ããã¯ç®¡çãããŠããªãã³ãŒãã«ã¯æäŸã§ããŸããã
+ ãã©ã³ã¶ã¯ã·ã§ã³ã¿ã€ã ã¢ãŠãã¯ãäžåè¡ãªãã©ã³ã¶ã¯ã·ã§ã³ã
+ ãŠãŒã¶ãŒã«ã¬ã¹ãã³ã¹ãè¿ããªããŸãŸãç¡æéã«ãªãœãŒã¹ã䜿ãç¶ããªã
+ ããšãä¿éããŸãã
+ 管çãããç°å¢ïŒJTAïŒã®å€ã§ã¯ãHibernateã¯ãã®æ©èœããã«ã«æäŸã§ããŸããã
+ ããããªãããHibernateã¯æ¬¡ã®ãããªããŒã¿ã¢ã¯ã»ã¹æäœã®å¶åŸ¡ãããã¯ã§ããŸãã
+ ããŒã¿ããŒã¹ã¬ãã«ã®ãããããã¯ã倧ããªãªã¶ã«ãã»ãããè¿ãã¯ãšãªã
+ å®çŸ©ãããã¿ã€ã ã¢ãŠãã«ãã£ãŠç¢ºå®ã«å¶éããŸãã
+ 管çãããç°å¢ã§ã¯ãHibernateã¯ãã©ã³ã¶ã¯ã·ã§ã³ã¿ã€ã ã¢ãŠããJTAã«å§è²ããŸãã
+ ãã®æ©èœã¯ãHibernateã® <literal>Transaction</literal> ãªããžã§ã¯ãã«
+ ãã£ãŠæœè±¡åãããŠããŸãã
+ </para>
+
+ <programlisting><![CDATA[
+Session sess = factory.openSession();
+try {
+ //set transaction timeout to 3 seconds
+ sess.getTransaction().setTimeout(3);
+ sess.getTransaction().begin();
+
+ // do some work
+ ...
+
+ sess.getTransaction().commit()
+}
+catch (RuntimeException e) {
+ sess.getTransaction().rollback();
+ throw e; // or display error message
+}
+finally {
+ sess.close();
+}]]></programlisting>
+
+ <para>
+ CMTããŒã³ã®äžã§ã¯ <literal>setTimeout()</literal> ã
+ åŒã³åºããªãããšã«æ³šæããŠãã ããã
+ ãã©ã³ã¶ã¯ã·ã§ã³ã¿ã€ã ã¢ãŠãã¯å®£èšçã«å®çŸ©ãããã¹ãã§ãã
+ </para>
+
+ </sect2>
+
+ </sect1>
+
+ <sect1 id="transactions-optimistic">
+ <title>楜芳çåæå®è¡å¶åŸ¡</title>
+
+ <para>
+ é«ãäžŠåæ§ãšé«ãã¹ã±ãŒã©ããªãã£ã®äž¡æ¹ãå®çŸããã¢ãããŒãã¯ã
+ ããŒãžã§ãã³ã°ã䜿ã£ã楜芳çåæå®è¡å¶åŸ¡ã®ã¿ã§ãã
+ æŽæ°ã®è¡çªãèŠã€ããããã«ïŒããã³ãæŽæ°ã倱ãããã®ãé²ãããã«ïŒã
+ ããŒãžã§ã³çªå·ãããã¯ã¿ã€ã ã¹ã¿ã³ãã䜿ã£ãŠãããŒãžã§ã³ããã§ãã¯ããŸãã
+ Hibernateã¯ã楜芳çåæå®è¡ãè¡ãã¢ããªã±ãŒã·ã§ã³ã³ãŒããæžãããã®
+ ã¢ãããŒããïŒã€æäŸããŸãã
+ ç§ãã¡ãèŠãããŠãŒã¹ã±ãŒã¹ã¯ãé·ã察話ãæã¡ãŸããã
+ ããŒãžã§ã³ãã§ãã¯ã¯ãŸã ïŒã€ã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®äžã§æŽæ°ã倱ãããšãé²ã
+ å©ç¹ãæã£ãŠããŸãã
+ </para>
+
+ <sect2 id="transactions-optimistic-manual">
+ <title>ã¢ããªã±ãŒã·ã§ã³ã«ããããŒãžã§ã³ãã§ãã¯</title>
+
+ <para>
+ Hibernateã«ã»ãšãã©å©ããŠããããã«å®è£
ããã±ãŒã¹ã§ãã
+ ããŒã¿ããŒã¹ãšã®ããåãã¯ãããããæ°ãã <literal>Session</literal> ã®äžã§èµ·ãããŸãã
+ éçºè
ã¯ããã¹ãŠã®æ°žç¶æ§ã€ã³ã¹ã¿ã³ã¹ãæäœããåã«ã
+ ããŒã¿ããŒã¹ããåèªã¿èŸŒã¿ãã責åããããŸãã
+ ãã®ã¢ãããŒãã§ã¯ã察話ãã©ã³ã¶ã¯ã·ã§ã³ã®åé¢ãå®ãããã«ã
+ ã¢ããªã±ãŒã·ã§ã³èªèº«ãããŒãžã§ã³ãã§ãã¯ãè¡ãå¿
èŠããããŸãã
+ ãã®ã¢ãããŒãã¯ãããŒã¿ããŒã¹ã¢ã¯ã»ã¹ã®äžã§ã¯ãæãéå¹çã§ãã
+ ãšã³ãã£ãã£EJBãšæã䌌ãŠããã¢ãããŒãã§ãã
+ </para>
+
+ <programlisting><![CDATA[// foo is an instance loaded by a previous
Session
+session = factory.openSession();
+Transaction t = session.beginTransaction();
+
+int oldVersion = foo.getVersion();
+session.load( foo, foo.getKey() ); // load the current state
+if ( oldVersion != foo.getVersion() ) throw new StaleObjectStateException();
+foo.setProperty("bar");
+
+t.commit();
+session.close();]]></programlisting>
+
+ <para>
+ <literal><version></literal>
ã䜿ã£ãŠã<literal>version</literal>
+ ããããã£ããããã³ã°ããŸãã
+ Hibernateã¯ããšã³ãã£ãã£ãããŒãã£ã§ããå Žåããã©ãã·ã¥ãã
+ ãã®éã« <literal>version</literal> ããããã£ãèªåçã«ã€ã³ã¯ãªã¡ã³ãããŸãã
+ </para>
+
+ <para>
+ ãã¡ãããããŒã¿ã®äžŠåæ§ãäœãç°å¢ã§éçšããŠãããããŒãžã§ã³ãã§ãã¯ãäžèŠãªãã
+ ãã®ã¢ãããŒãã䜿ããããŒãžã§ã³ãã§ãã¯ãã¹ãããããã ãã§ãã
+ ãã®å Žåã¯ãé·ã察話ã«ã¯ã
+ <emphasis>ãæåŸã«ã³ããããããã®ãåã€ã</emphasis> ãããã©ã«ãã®æŠç¥ã§ãããã
+ ãã®ã¢ãããŒãã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒãæ··ä¹±ããããããããªãããšã
+ å¿ã«çããŠçœ®ããŠãã ãããããã¯ããšã©ãŒã¡ãã»ãŒãžãç«¶åãã倿ŽãããŒãžããæ©äŒã
+ ãªããŸãŸãæŽæ°ã倱ãçµéšãããããã§ãã
+ </para>
+
+ <para>
+ 確ãã«ãããã¥ã¢ã«ã«ããããŒãžã§ã³ãã§ãã¯ã¯ãäºçްãªååŒã ãã§å®è¡ã§ããŸããã
+ å€ãã®ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠå®çšçã§ã¯ãããŸããã
+ ãã°ãã°ãïŒã€ã®ã€ã³ã¹ã¿ã³ã¹ã ãã§ãªãã
+ ä¿®æ£ããããªããžã§ã¯ãã®å®å
šãªã°ã©ãããã§ãã¯ããªããã°ãªããŸããã
+ Hibernateã¯ãèšèšãã©ãã€ã ãšããŠãæ¡åŒµ <literal>Session</literal> ã
+ åé¢ãããã€ã³ã¹ã¿ã³ã¹ãèªåçã«ããŒãžã§ã³ãã§ãã¯ããŸãã
+ </para>
+
+ </sect2>
+
+ <sect2 id="transactions-optimistic-longsession">
+ <title>æ¡åŒµã»ãã·ã§ã³ãšèªåããŒãžã§ãã³ã°</title>
+
+ <para>
+ ïŒã€ã® <literal>Session</literal> ã€ã³ã¹ã¿ã³ã¹ãšãã®æ°žç¶æ§ã€ã³ã¹ã¿ã³ã¹ã¯ã
+ <emphasis>session-per-conversation</emphasis> ãšããŠç¥ãããã
+ 察話å
šäœã§äœ¿ãããŸãã
+ Hibernateã¯ãã©ãã·ã¥ããéã«ãã€ã³ã¹ã¿ã³ã¹ã®ããŒãžã§ã³ããã§ãã¯ããŸãã
+ åæã«ä¿®æ£ãããããšãæ€åºãããšãäŸå€ãæããŸãã
+ ãã®äŸå€ããã£ããããŠæ±ãã®ã¯ãéçºè
ã®è²¬ä»»ã§ã
+ ïŒäžè¬çãªéžæè¢ã¯ã倿ŽãããŒãžãããå€ããªãããŒã¿ã§ããžãã¹å¯Ÿè©±ã
+ åã¹ã¿ãŒãããæ©äŒããŠãŒã¶ãŒã«æäŸããããšã§ãïŒã
+ </para>
+
+ <para>
+ ãŠãŒã¶ãŒã®å¯Ÿè©±ãåŸ
ã£ãŠãããšãã¯ã
+ <literal>Session</literal> ãåºç€ãšãªãJDBCã³ãã¯ã·ã§ã³ããåãé¢ããŸãã
+ ãã®ã¢ãããŒãã¯ãããŒã¿ããŒã¹ã¢ã¯ã»ã¹ã®äžã§ã¯ãæãå¹ççã§ãã
+ ã¢ããªã±ãŒã·ã§ã³ã¯ãããŒãžã§ã³ãã§ãã¯ãåé¢ãããã€ã³ã¹ã¿ã³ã¹ãå远å ããããš
+ ã«é¢å¿ãæã€å¿
èŠã¯ãããŸããããŸããããããããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®äžã§
+ ã€ã³ã¹ã¿ã³ã¹ãåèªã¿èŸŒã¿ããå¿
èŠã¯ãããŸããã
+ </para>
+
+ <programlisting><![CDATA[// foo is an instance loaded earlier by the
old session
+Transaction t = session.beginTransaction(); // Obtain a new JDBC connection, start
transaction
+
+foo.setProperty("bar");
+
+session.flush(); // Only for last transaction in conversation
+t.commit(); // Also return JDBC connection
+session.close(); // Only for last transaction in
conversation]]></programlisting>
+
+ <para>
+ <literal>foo</literal> ãªããžã§ã¯ãã¯ãèªåãããŒããã
<literal>Session</literal>
+ ããŸã ç¥ã£ãŠããŸãã
+ å€ãã»ãã·ã§ã³ã®äžã§æ°ããããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãéå§ããããšã§ã
+ æ°ããã³ãã¯ã·ã§ã³ãååŸãããã®ã»ãã·ã§ã³ãåéãããŸãã
+ ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãã³ãããããããšã§ã
+ ã»ãã·ã§ã³ããJDBCã³ãã¯ã·ã§ã³ãåæããã³ãã¯ã·ã§ã³ãããŒã«ã«è¿ããŸãã
+ 忥ç¶ããåŸãæŽæ°ããŠããªãããŒã¿ã®ããŒãžã§ã³ãã§ãã¯ã匷å¶ããããã«ã
+ ä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«ããæŽæ°ãããŠãããããããªããªããžã§ã¯ãã«é¢ããŠã
+ <literal>LockMode.READ</literal> ãã€ããŠ
<literal>Session.lock()</literal>
+ ãåŒã³åºãããšãã§ããŸãã
+ æŽæ°ã㊠<emphasis>ãã</emphasis> ããŒã¿ãããã¯ããå¿
èŠã¯ãããŸããã
+
+ éåžžãæ¡åŒµ <literal>Session</literal> ã«
<literal>FlushMode.MANUAL</literal>
+ ãã»ããããŸãã
+ æåŸã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®åšæã§ã®ã¿ã
+ 察話ã®äžã§å€æŽããããã¹ãŠãå®éã«æ°žç¶åãããããã§ãã
+ ããã«ãæåŸã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®ã¿ <literal>flush()</literal>
+ ãªãã¬ãŒã·ã§ã³ãå«ã¿ãŸãããããŠã察話ãçµããããããã«ã
+ ã»ãã·ã§ã³ã <literal>close()</literal> ããŸãã
+ </para>
+
+ <para>
+ ãŠãŒã¶ãŒãèæ
®äžã«ãæ ŒçŽããããšãã§ããªãããã <literal>Session</literal>
+ ã倧ããã®ã§ããã°ããã®ãã¿ãŒã³ã¯åé¡ããããŸãã
+ äŸãã°ã<literal>HttpSession</literal> ã¯å¯èœãªéãå°ããä¿ã€ã¹ãã§ãã
+ <literal>Session</literal> ã¯ïŒåŒ·å¶çã«ïŒïŒæ¬¡ãã£ãã·ã¥ã§ãããã
+ ããŒããããªããžã§ã¯ãããã¹ãŠä¿æããŸãã
+ ããããããªã¯ãšã¹ãïŒã¬ã¹ãã³ã¹ã®ãµã€ã¯ã«ãæ°åã§ããã°ããã®æŠç¥ã䜿ããŸãã
+
+ ïŒã€ã®å¯Ÿè©±ã®ããã ãã« <literal>Session</literal> ã䜿ãã¹ãã§ãã
+ ãªããªããããã«æ°é®®ã§ãªãããŒã¿ãæã€ããã§ãã
+ </para>
+
+ <para>
+ ïŒHibernateã®ä»¥åã®ããŒãžã§ã³ã¯ãæç€ºç㪠<literal>Session</literal> ã®
+ åæãšåæ¥ç¶ãå¿
èŠã ã£ãããšã«æ³šæããŠãã ããã
+ ãããã®ã¡ãœããã¯éæšå¥šã«ãªããŸããã
+ ãªããªãããã©ã³ã¶ã¯ã·ã§ã³ã®éå§ãšçµäºã¯åã广ãããããã§ããïŒ
+ </para>
+
+ <para>
+ åæãã <literal>Session</literal> ãæ°žç¶åå±€ã®è¿ãã§ä¿æãã¹ãã§ããããšã«
+ 泚æããŠãã ããã
+ èšãæãããšãïŒå±€ç°å¢ã®äžã§ <literal>Session</literal> ãä¿æããããã«ã
+ EJBã¹ããŒããã«ã»ãã·ã§ã³Beanã䜿ã£ãŠãã ããã
+ <literal>HttpSession</literal> ã«æ ŒçŽããããã«ãWebå±€ã«è»¢éããªãã§ãã ãã
+ ïŒå¥ã®å±€ãžã®ã·ãªã¢ã©ã€ãºãããªãã§ãã ããïŒã
+ </para>
+
+ <para>
+
æ¡åŒµã»ãã·ã§ã³ãã¿ãŒã³ïŒãããã¯ã<emphasis>session-per-conversation</emphasis>ïŒã¯ã
+ èªåçãªã«ã¬ã³ãã»ãã·ã§ã³ã³ã³ããã¹ã管çã宿œããããé£ããã
+ ãã®ããã«ãããªã㯠<literal>CurrentSessionContext</literal>
ã®å®è£
ãäŸçµŠããå¿
èŠããããŸãã
+ Hibernate Wikiã«ããäŸãåç
§ããŠãã ããã
+ </para>
+
+ </sect2>
+
+ <sect2 id="transactions-optimistic-detached">
+ <title>ãã¿ããããããªããžã§ã¯ããšèªåããŒãžã§ãã³ã°</title>
+
+ <para>
+ æ°ãã <literal>Session</literal>ã«ãããæ°žç¶åã¹ãã¢ïŒè𳿳šïŒïŒ€ïŒ¢ïŒãšã®å¯Ÿè©±ãçºçããŸãã
+ ãŸãäžæ¹ãåãæ°žç¶æ§ã€ã³ã¹ã¿ã³ã¹ããããŒã¿ããŒã¹ãšã®å¯Ÿè©±ããšã«åå©çšãããŸãã
+ ã¢ããªã±ãŒã·ã§ã³ã¯ãå
ã
ã¯ä»ã® <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
+foo.setProperty("bar");
+session = factory.openSession();
+Transaction t = session.beginTransaction();
+session.saveOrUpdate(foo); // Use merge() if "foo" might have been loaded
already
+t.commit();
+session.close();]]></programlisting>
+
+ <para>
+ ãã®å Žåããã¯ããHibernateã¯ãã©ãã·ã¥ããéã«ãã€ã³ã¹ã¿ã³ã¹ã®ããŒãžã§ã³ããã§ãã¯ããŸãã
+ æŽæ°ã®ç«¶åãçºçããå Žåã«ã¯ãäŸå€ãæããŸãã
+ </para>
+
+ <para>
+ ãªããžã§ã¯ããä¿®æ£ãããŠããªãããšã確信ããŠããå Žåã¯ã
+ <literal>update()</literal>
ã®ä»£ããã«ã<literal>LockMode.READ</literal> ã䜿ã£ãŠã
+ <literal>lock()</literal> ãåŒã³åºãããšãã§ããŸã
+ ïŒãã¹ãŠã®ãã£ãã·ã¥ãè¿åããããŒãžã§ã³ãã§ãã¯ã宿œããŸãïŒã
+ </para>
+
+ </sect2>
+
+ <sect2 id="transactions-optimistic-customizing">
+ <title>èªåããŒãžã§ãã³ã°ã®ã«ã¹ã¿ãã€ãº</title>
+
+ <para>
+ ãããã³ã°ã® <literal>optimistic-lock</literal> 屿§ã«
<literal>false</literal>
+ ãèšå®ããããšã«ãããç¹å®ã®ããããã£ãã³ã¬ã¯ã·ã§ã³ã®ããã«
+ èªåããŒãžã§ã³ã€ã³ã¯ãªã¡ã³ããç¡å¹ã«ã§ããŸãã
+ ããããã£ãããŒãã£ã§ãã£ãŠããããŒãžã§ã³ãã€ã³ã¯ãªã¡ã³ãããŸããã
+ </para>
+
+ <para>
+ ã¬ã¬ã·ãŒã®ããŒã¿ããŒã¹ã¹ããŒãã¯ããã°ãã°åºå®çã§ããã倿Žã§ããŸããã
+ ãŸãã¯ãä»ã®ã¢ããªã±ãŒã·ã§ã³ãåãããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ããªããã°ãªããã
+ ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ããŒãžã§ã³çªå·ãã¿ã€ã ã¹ã¿ã³ãããæäœããæ¹æ³ãç¥ããŸããã
+ ã©ã¡ãã®å ŽåããããŒãã«ã®ç¹å®ã®ã«ã©ã ãåœãŠã«ããŠãããŒãžã§ãã³ã°ãè¡ããŸããã
+ ããŒãžã§ã³ãã¿ã€ã ã¹ã¿ã³ãã®ããããã£ããããã³ã°ããã«ãããŒãžã§ã³ãã§ãã¯ãããããã«ã
+ <literal><class></literal> ãããã³ã°ã«
<literal>optimistic-lock="all"</literal> ã
+ æå®ããŠãã ããã
+ è¡ã®ãã¹ãŠã®ãã£ãŒã«ãã®ç¶æ
ãæ¯èŒããããã«ãªããŸãã
+ ããã¯ãHibernateãå€ãç¶æ
ãšæ°ããç¶æ
ãæ¯èŒã§ããå Žåã«ã
+ çè«çã«åäœããã ãã§ããããšã«æ³šæããŠãã ããã
+ äŸãã°ãsession-per-request-with-detached-objects ã§ã¯ãªãã
+ ïŒã€ã®é·ã <literal>Session</literal> ã䜿ãå Žåã§ãã
+ </para>
+
+ <para>
+ ãšãã©ããè¡ããã倿Žãéãªããªãéããåæã«è¡ããã倿Žãåãå
¥ããããšãã§ããŸãã
+ <literal><class></literal> ãããã³ã°ã«
<literal>optimistic-lock="dirty"</literal>
+ ãèšå®ããå Žåããã©ãã·ã¥ããéã«ãHibernateã¯ããŒãã£ãã£ãŒã«ãã®ã¿ãæ¯èŒããŸãã
+ </para>
+
+ <para>
+ å°çšã®ããŒãžã§ã³ïŒã¿ã€ã ã¹ã¿ã³ãã®ã«ã©ã ã䜿ãå Žåã
+ ãããã¯ãã¹ãŠïŒããŒãã£ã®ãã£ãŒã«ããæ¯èŒããå Žåã©ã¡ãã§ãã£ãŠãã
+ 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>
+
+ </sect1>
+
+ <sect1 id="transactions-locking">
+ <title>æ²èгçããã¯</title>
+
+ <para>
+ ãŠãŒã¶ãããã¯æŠç¥ã«æ©ãã®ã«å€ãã®æéãè²»ããããšãæå³ããŠããŸããã
+ éåžžã¯ãJDBCã³ãã¯ã·ã§ã³ã«åé¢ã¬ãã«ãæå®ãã
+ åã«ããŒã¿ããŒã¹ã«ãã¹ãŠã®ä»äºããããã°ååã§ãã
+ ããããªãããé«åºŠãªãŠãŒã¶ã¯ãæä»çãªæ²èгçããã¯ãç²åŸããããšãã
+ æ°ãããã©ã³ã¶ã¯ã·ã§ã³ãéå§ãããéã«ããã¯ãåç²åŸããããšã
+ ãšãã©ãæããããããŸããã
+ </para>
+
+ <para>
+ Hibernateã¯ãã€ãããŒã¿ããŒã¹ã®ããã¯ã®ä»çµã¿ã䜿ããŸãã
+ ã¡ã¢ãªå
ã®ãªããžã§ã¯ããæ±ºããŠããã¯ããŸããïŒ
+ </para>
+
+ <para>
+ <literal>LockMode</literal> ã¯ã©ã¹ã¯ãHibernateãç²åŸã§ããç°ãªãããã¯ã¬ãã«ãå®çŸ©ããŸãã
+ 以äžã®ä»çµã¿ã«ãããããã¯ãç²åŸã§ããŸãã
+ </para>
+
+ <itemizedlist spacing="compact">
+ <listitem>
+ <para>
+ <literal>LockMode.WRITE</literal> ã¯ã
+ Hibernateãè¡ãæŽæ°ãããã¯æ¿å
¥ããéã«èªåçã«åŸãããŸãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>LockMode.UPGRADE</literal> ã¯ã
+ ããŒã¿ããŒã¹ã§ãµããŒããããŠããææ³ <literal>SELECT ... FOR
UPDATE</literal>
+ ã䜿ã£ããæç€ºçãªãŠãŒã¶ãŒèŠæ±ã«ããåŸããããããããŸããã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>LockMode.UPGRADE_NOWAIT</literal> ã¯ã
+ Oracle ã§ <literal>SELECT ... FOR UPDATE NOWAIT</literal>
ã䜿ã£ãã
+ æç€ºçãªãŠãŒã¶ãŒèŠæ±ã«ããåŸããããããããŸããã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>LockMode.READ</literal> ã¯ã
+ Repeatable Readãããã¯Serializableã®åé¢ã¬ãã«ã§ãããŒã¿ãèªãã éã«èªåçã«åŸãããŸãã
+ ãããããæç€ºçãªãŠãŒã¶ãŒèŠæ±ã«ãããåååŸãããŸãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>LockMode.NONE</literal> ã¯ãããã¯ããªãããšã衚ããŸãã
+ <literal>Transaction</literal> ã®çµããã«ã
+ ãã¹ãŠã®ãªããžã§ã¯ãã¯ãã®ããã¯ã¢ãŒãã«åãæ¿ãããŸãã
+ <literal>update()</literal> ã
<literal>saveOrUpdate()</literal> ãåŒã³åºãããšã«ãã£ãŠã
+ ã»ãã·ã§ã³ã«é¢é£ä»ãããããªããžã§ã¯ããããã®ããã¯ã¢ãŒãã§åºçºããŸãã
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ ãæç€ºçãªãŠãŒã¶ãŒèŠæ±ããšã¯ãäžèšã®æ¹æ³ã®ïŒã€ã§èšã衚ããŸãã
+ </para>
+
+ <itemizedlist spacing="compact">
+ <listitem>
+ <para>
+ <literal>LockMode</literal> ãæå®ãã
<literal>Session.load()</literal> ã®åŒã³åºãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>Session.lock()</literal> ã®åŒã³åºãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>Query.setLockMode()</literal> ã®åŒã³åºãã
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ <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>
+ æå®ãããããã¯ã¢ãŒãã <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>
+ ããŒã¿ããŒã¹ãèŠæ±ãããããã¯ã¢ãŒãããµããŒãããŠããªãå Žåã
+ Hibernateã¯ïŒäŸå€ãæãã代ããã«ãïŒé©åãªä»£ããã®ã¢ãŒãã䜿ããŸãã
+ ããã¯ãã¢ããªã±ãŒã·ã§ã³ãããŒã¿ãã«ã§ããããšãä¿èšŒããŸãã
+ </para>
+
+ </sect1>
+
+ <sect1 id="transactions-connection-release">
+ <title>ã³ãã¯ã·ã§ã³éæŸã¢ãŒã</title>
+
+ <para>
+ 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> - æ¬è³ªçã«äžèšã§è¿°ã¹ãã¬ã¬ã·ãŒã®æ¯ãèãã§ãã
+ Hibernateã»ãã·ã§ã³ã¯æåã«JDBCã¢ã¯ã»ã¹ãå®è¡ããå¿
èŠãããéã«ã³ãã¯ã·ã§ã³ãåŸãŸãã
+ ãããŠãã»ãã·ã§ã³ãéãããããŸã§ãã³ãã¯ã·ã§ã³ãä¿æããŸãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>AFTER_TRANSACTION</literal> -
+ <literal>org.hibernate.Transaction</literal> ãå®äºããåŸã
+ ã³ãã¯ã·ã§ã³ãéæŸããŸãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>AFTER_STATEMENT</literal> ïŒç©æ¥µçãªéæŸãšãåŒã°ããïŒ -
+ ãã¹ãŠã®ã¹ããŒãã¡ã³ããããããå®è¡ãããåŸãã³ãã¯ã·ã§ã³ãéæŸãããŸãã
+ ã¹ããŒãã¡ã³ããã»ãã·ã§ã³ã«é¢é£ãããªãœãŒã¹ãéãããŸãŸã«ããå Žåã¯ã
+ ãã®ç©æ¥µçãªéæŸã¯ã¹ããããããŸãã
+ ä»ã®ãšããããããèµ·ããã®ã¯
<literal>org.hibernate.ScrollableResults</literal>
+ ã䜿ãããå Žåã®ã¿ã§ãã
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ ã³ã³ãã£ã°ã¬ãŒã·ã§ã³ãã©ã¡ãŒã¿ã®
<literal>hibernate.connection.release_mode</literal>
+ ã¯ã䜿çšããéæŸã¢ãŒããæå®ããããã«äœ¿ããŸãã
+ æå®ã§ããå€ã¯æ¬¡ã®éãã§ãã
+ </para>
+
+ <itemizedlist spacing="compact">
+ <listitem>
+ <para>
+ <literal>auto</literal> ïŒããã©ã«ãïŒ - ãããéžæãããš
+
<literal>org.hibernate.transaction.TransactionFactory.getDefaultReleaseMode()</literal>
+ ã¡ãœããã«ãã£ãŠè¿ãããéæŸã¢ãŒãã«å§è²ãããŸãã
+ ãã®ã¡ãœããã¯ã
+ JTATransactionFactoryã«ã¯ConnectionReleaseMode.AFTER_STATEMENTãè¿ãã
+
JDBCTransactionFactoryã«ã¯ConnectionReleaseMode.AFTER_TRANSACTIONãè¿ããŸãã
+ ãã®ããã©ã«ãã®æ¯ãèããå€ããŠããŸããã£ã詊ãããããŸããã
+ ããã¯ããã®èšå®å€ãåå ã§èµ·ããé害ã¯ã
+ ãŠãŒã¶ã³ãŒãã®äžã§ãã°ãééã£ãæ¡ä»¶ã«ãªããããããã§ãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>on_close</literal> -
ConnectionReleaseMode.ON_CLOSEã䜿ããŸãã
+ ãã®èšå®ã¯åŸæ¹äºæã®ããã«æ®ãããŠããŸããã䜿ããªãããšã匷ãå§ããŸãã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>after_transaction</literal> -
ConnectionReleaseMode.AFTER_TRANSACTIONã䜿ããŸãã
+ ãã®èšå®ã¯JTAç°å¢ã®äžã§ã¯äœ¿ãã¹ãã§ã¯ãããŸããã
+ ConnectionReleaseMode.AFTER_TRANSACTIONãæå®ããèªåã³ãããã¢ãŒãã®äžã§ã¯ã
+ éæŸã¢ãŒããAFTER_STATEMENTã§ãããã®ããã«ãã³ãã¯ã·ã§ã³ã¯éæŸãããããšã«æ³šæããŠãã ããã
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <literal>after_statement</literal> -
ConnectionReleaseMode.AFTER_STATEMENTã䜿ããŸãã
+ ããã«ãèšå®ããã <literal>ConnectionProvider</literal> ã¯ã
+ ãã®èšå® (<literal>supportsAggressiveRelease()</literal>)
ããµããŒããããã©ãã
+ ã調ã¹ãããã«äœ¿çšããŸãã
+ ããããã§ãªãå ŽåãéæŸã¢ãŒãã¯ConnectionReleaseMode.AFTER_TRANSACTION
+ ã«ãªã»ãããããŸãã
+ ãã®èšå®ã¯æ¬¡ã®ç°å¢ã§ã®ã¿å®å
šã§ãã
+ ããã¯ã<literal>ConnectionProvider.getConnection()</literal>
ãåŒã³åºããã³ã«
+ åºç€ãšãªãJDBCã³ãã¯ã·ã§ã³ãåããã®ãååŸã§ãããã
+ åãã³ãã¯ã·ã§ã³ãåŸãããããšãåé¡ãšãªããªãèªåã³ãããç°å¢ã®äžã§ãã
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </sect1>
+
+</chapter>
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-25
06:31:49 UTC (rev 14130)
+++ core/trunk/documentation/manual/ja-JP/src/main/docbook/content/tutorial.xml 2007-10-25
07:54:59 UTC (rev 14131)
@@ -1,6 +1,6 @@
<?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">
-
+<!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>
@@ -692,6 +692,8 @@
<literal>hibernate.cfg.xml</literal>
ã®ãã®æ©èœã®èšå®ã§ã"thread"ãæå®ããããšãæãåºããŠãã ããã
ãã®ããçŸåšã®äœæ¥åäœã®ã¹ã³ãŒãã¯ããã®ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããçŸåšã®Javaã¹ã¬ããã§ãã
ãããããã§å
šãŠã§ã¯ãããŸããã
+ </para>
+ <para>
<literal>Session</literal> ã¯æåã«å¿
èŠãšãªã£ããšããã€ãŸãæåã«
<literal>getCurrentSession()</literal> ã
åŒã°ãããšãã«éå§ããŸãã
ãã®ãšãHibernateã«ããçŸåšã®ã¹ã¬ããã«çµã³ä»ããããŸãã
@@ -701,7 +703,16 @@
æ°ãã <literal>Session</literal> ãååŸããŠæ°ããäœæ¥åäœãã¹ã¿ãŒãã§ããŸãã
ãã® <emphasis>thread-bound</emphasis>
ããã°ã©ãã³ã°ã»ã¢ãã«ã¯Hibernateãå©çšããäžã§æã人æ°ããããŸãã
</para>
-
+ <para>
+ Related to the unit of work scope, should the Hibernate
<literal>Session</literal> be used to
+ execute one or several database operations? The above example uses one
<literal>Session</literal>
+ for one operation. This is pure coincidence, the example is just not complex enough
to show any
+ other approach. The scope of a Hibernate <literal>Session</literal> is
flexible but you should
+ never design your application to use a new Hibernate
<literal>Session</literal> for
+ <emphasis>every</emphasis> database operation. So even if you see it a
few more times in
+ the following (very trivial) examples, consider
<emphasis>session-per-operation</emphasis>
+ an anti-pattern. A real (web) application is shown later in this tutorial.
+ </para>
<para>
ãã©ã³ã¶ã¯ã·ã§ã³ã®æ±ããšå¢çã®è©³ããæ
å ±ã«ã€ããŠã¯ã
<xref linkend="transactions"/> ãèŠãŠãã ããã
@@ -1379,7 +1390,12 @@
ããŒã¿ã®èªã¿æžãã«é¢ãããããã¹ãŠã®ããŒã¿ã¢ã¯ã»ã¹ã¯ãã©ã³ã¶ã¯ã·ã§ã³å
ã§è¡ããŸãã
ïŒã¢ããªã±ãŒã·ã§ã³å
ã§ã¯ãªãŒãã³ãããã¢ãŒãã䜿çšããŸããïŒã
</para>
-
+ <para>
+ Do <emphasis>not</emphasis> use a new Hibernate
<literal>Session</literal> for
+ every database operation. Use one Hibernate <literal>Session</literal>
that is
+ scoped to the whole request. Use
<literal>getCurrentSession()</literal>, so that
+ it is automatically bound to the current Java thread.
+ </para>
<para>
次ã«ããªã¯ãšã¹ãã®ã¢ã¯ã·ã§ã³ã¯åŠçãããã¬ã¹ãã³ã¹ã§ããHTMLãæç»ãããŸãã
ããã«ã€ããŠã¯ããã«èª¬æããŸãã