merge with latest English XML
git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@14132 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
parent
85e223b829
commit
51efece885
|
@ -1,216 +1,634 @@
|
|||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2007-10-25 07:47+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
#: index.docbook:21
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#. Tag: title
|
||||
#: architecture.xml:21
|
||||
#, no-c-format
|
||||
msgid "Architecture"
|
||||
msgstr ""
|
||||
msgstr "アーキテクチャ"
|
||||
|
||||
#: index.docbook:24
|
||||
#. Tag: title
|
||||
#: architecture.xml:24
|
||||
#, no-c-format
|
||||
msgid "Overview"
|
||||
msgstr ""
|
||||
msgstr "概観"
|
||||
|
||||
#: index.docbook:26
|
||||
#. Tag: para
|
||||
#: architecture.xml:26
|
||||
#, no-c-format
|
||||
msgid "A (very) high-level view of the Hibernate architecture:"
|
||||
msgstr ""
|
||||
msgstr "Hibernateアーキテクチャの(非常に)高いレベルからのビュー:"
|
||||
|
||||
#: index.docbook:39
|
||||
msgid "This diagram shows Hibernate using the database and configuration data to provide persistence services (and persistent objects) to the application."
|
||||
#. Tag: para
|
||||
#: architecture.xml:39
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"This diagram shows Hibernate using the database and configuration data to "
|
||||
"provide persistence services (and persistent objects) to the application."
|
||||
msgstr ""
|
||||
"この図はHibernateが、アプリケーションに対して永続化サービス (と永続オブジェ"
|
||||
"クト)を提供するために、データベースと設定データを使うことを 示しています。"
|
||||
|
||||
#: index.docbook:44
|
||||
msgid "We would like to show a more detailed view of the runtime architecture. Unfortunately, Hibernate is flexible and supports several approaches. We will show the two extremes. The \"lite\" architecture has the application provide its own JDBC connections and manage its own transactions. This approach uses a minimal subset of Hibernate's APIs:"
|
||||
#. Tag: para
|
||||
#: architecture.xml:44
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"We would like to show a more detailed view of the runtime architecture. "
|
||||
"Unfortunately, Hibernate is flexible and supports several approaches. We "
|
||||
"will show the two extremes. The \"lite\" architecture has the application "
|
||||
"provide its own JDBC connections and manage its own transactions. This "
|
||||
"approach uses a minimal subset of Hibernate's APIs:"
|
||||
msgstr ""
|
||||
"ここで実行時アーキテクチャのより詳細なビューをお見せしましょう。 あいにく、"
|
||||
"Hibernateは柔軟であり、いろいろなアプローチをサポートしています。 ここでは、2"
|
||||
"つの極端な例をお見せします。 「軽い」アーキテクチャでは、アプリケーションが自"
|
||||
"前のJDBCコネクションを用意し、 アプリケーション自身がトランザクションを管理し"
|
||||
"ます。 この方法は、Hibernate APIの最小限のサブセットを使います:"
|
||||
|
||||
#: index.docbook:61
|
||||
msgid "The \"full cream\" architecture abstracts the application away from the underlying JDBC/JTA APIs and lets Hibernate take care of the details."
|
||||
#. Tag: para
|
||||
#: architecture.xml:61
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"The \"full cream\" architecture abstracts the application away from the "
|
||||
"underlying JDBC/JTA APIs and lets Hibernate take care of the details."
|
||||
msgstr ""
|
||||
"「重い」アーキテクチャは、アプリケーションから、その下に位置するJDBCやJTAの"
|
||||
"APIを 取り払って抽象化し、その詳細の面倒をHibernateに見させます。"
|
||||
|
||||
#: index.docbook:75
|
||||
#. Tag: para
|
||||
#: architecture.xml:75
|
||||
#, fuzzy, no-c-format
|
||||
msgid "Heres some definitions of the objects in the diagrams:"
|
||||
msgstr ""
|
||||
msgstr "以下は、上の図に含まれるオブジェクトの定義です: <placeholder-1/>"
|
||||
|
||||
#: index.docbook:80
|
||||
#. Tag: term
|
||||
#: architecture.xml:80
|
||||
#, no-c-format
|
||||
msgid "SessionFactory (<literal>org.hibernate.SessionFactory</literal>)"
|
||||
msgstr ""
|
||||
msgstr "SessionFactory (<literal>org.hibernate.SessionFactory</literal>)"
|
||||
|
||||
#: index.docbook:82
|
||||
msgid "A threadsafe (immutable) cache of compiled mappings for a single database. A factory for <literal>Session</literal> and a client of <literal>ConnectionProvider</literal>. Might hold an optional (second-level) cache of data that is reusable between transactions, at a process- or cluster-level."
|
||||
#. Tag: para
|
||||
#: architecture.xml:82
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"A threadsafe (immutable) cache of compiled mappings for a single database. A "
|
||||
"factory for <literal>Session</literal> and a client of "
|
||||
"<literal>ConnectionProvider</literal>. Might hold an optional (second-level) "
|
||||
"cache of data that is reusable between transactions, at a process- or "
|
||||
"cluster-level."
|
||||
msgstr ""
|
||||
"1つのデータベースに対するコンパイルされたマッピングの スレッドセーフな(更新"
|
||||
"不能の)キャッシュ。 <literal>Session</literal> のファクトリであり、 "
|
||||
"<literal>ConnectionProvider</literal> のクライアント。 オプションとして、プロ"
|
||||
"セスまたはクラスタレベルにおいて、 トランザクション間で再利用可能なデータの"
|
||||
"(二次)キャッシュを持ちます。"
|
||||
|
||||
#: index.docbook:92
|
||||
#. Tag: term
|
||||
#: architecture.xml:92
|
||||
#, no-c-format
|
||||
msgid "Session (<literal>org.hibernate.Session</literal>)"
|
||||
msgstr ""
|
||||
msgstr "Session (<literal>org.hibernate.Session</literal>)"
|
||||
|
||||
#: index.docbook:94
|
||||
msgid "A single-threaded, short-lived object representing a conversation between the application and the persistent store. Wraps a JDBC connection. Factory for <literal>Transaction</literal>. Holds a mandatory (first-level) cache of persistent objects, used when navigating the object graph or looking up objects by identifier."
|
||||
#. Tag: para
|
||||
#: architecture.xml:94
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"A single-threaded, short-lived object representing a conversation between "
|
||||
"the application and the persistent store. Wraps a JDBC connection. Factory "
|
||||
"for <literal>Transaction</literal>. Holds a mandatory (first-level) cache of "
|
||||
"persistent objects, used when navigating the object graph or looking up "
|
||||
"objects by identifier."
|
||||
msgstr ""
|
||||
"アプリケーションと永続ストアとの対話を表す、 シングルスレッドで短命のオブジェ"
|
||||
"クト。 JDBCコネクションをラップします。 <literal>Transaction</literal> のファ"
|
||||
"クトリです。 永続オブジェクトの必須の(一次)キャッシュを保持します。 この"
|
||||
"キャッシュはオブジェクトグラフをナビゲーションする時や、 識別子でオブジェクト"
|
||||
"を検索する時に使われます。"
|
||||
|
||||
#: index.docbook:104
|
||||
#. Tag: term
|
||||
#: architecture.xml:104
|
||||
#, no-c-format
|
||||
msgid "Persistent objects and collections"
|
||||
msgstr ""
|
||||
msgstr "Persistent objects と Collections"
|
||||
|
||||
#: index.docbook:106
|
||||
msgid "Short-lived, single threaded objects containing persistent state and business function. These might be ordinary JavaBeans/POJOs, the only special thing about them is that they are currently associated with (exactly one) <literal>Session</literal>. As soon as the <literal>Session</literal> is closed, they will be detached and free to use in any application layer (e.g. directly as data transfer objects to and from presentation)."
|
||||
#. Tag: para
|
||||
#: architecture.xml:106
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Short-lived, single threaded objects containing persistent state and "
|
||||
"business function. These might be ordinary JavaBeans/POJOs, the only special "
|
||||
"thing about them is that they are currently associated with (exactly one) "
|
||||
"<literal>Session</literal>. As soon as the <literal>Session</literal> is "
|
||||
"closed, they will be detached and free to use in any application layer (e.g. "
|
||||
"directly as data transfer objects to and from presentation)."
|
||||
msgstr ""
|
||||
"永続化状態とビジネスメソッドを持つ、短命でシングルスレッドのオブジェクト。 こ"
|
||||
"れは通常のJavaBeans/POJOのこともありますが、特徴的なことは、 その時点での(た"
|
||||
"だ1つの) <literal>Session</literal> と関連していることです。 "
|
||||
"<literal>Session</literal> がクローズされるとすぐに、 それらは切り離されて他"
|
||||
"のアプリケーション層から自由に使うことができます。 (例えばデータ・トランス"
|
||||
"ファ・オブジェクトとして、 プレゼンテーション層から、またはプレゼンテーション"
|
||||
"層へ直接使用できます。)"
|
||||
|
||||
#: index.docbook:117
|
||||
#. Tag: term
|
||||
#: architecture.xml:117
|
||||
#, no-c-format
|
||||
msgid "Transient and detached objects and collections"
|
||||
msgstr ""
|
||||
msgstr "Transient と detached な objects と Collections"
|
||||
|
||||
#: index.docbook:119
|
||||
msgid "Instances of persistent classes that are not currently associated with a <literal>Session</literal>. They may have been instantiated by the application and not (yet) persisted or they may have been instantiated by a closed <literal>Session</literal>."
|
||||
#. Tag: para
|
||||
#: architecture.xml:119
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Instances of persistent classes that are not currently associated with a "
|
||||
"<literal>Session</literal>. They may have been instantiated by the "
|
||||
"application and not (yet) persisted or they may have been instantiated by a "
|
||||
"closed <literal>Session</literal>."
|
||||
msgstr ""
|
||||
"現時点では <literal>Session</literal> と関連していない、 永続クラスのインスタ"
|
||||
"ンス。 すでにアプリケーション側でインスタンス化されていて、まだ永続化されてい"
|
||||
"ないか、 クローズされた <literal>Session</literal> でインスタンス化されたかの"
|
||||
"どちらかです。"
|
||||
|
||||
#: index.docbook:128
|
||||
#. Tag: term
|
||||
#: architecture.xml:128
|
||||
#, no-c-format
|
||||
msgid "Transaction (<literal>org.hibernate.Transaction</literal>)"
|
||||
msgstr ""
|
||||
msgstr "Transaction (<literal>org.hibernate.Transaction</literal>)"
|
||||
|
||||
#: index.docbook:130
|
||||
msgid "(Optional) A single-threaded, short-lived object used by the application to specify atomic units of work. Abstracts application from underlying JDBC, JTA or CORBA transaction. A <literal>Session</literal> might span several <literal>Transaction</literal>s in some cases. However, transaction demarcation, either using the underlying API or <literal>Transaction</literal>, is never optional!"
|
||||
#. Tag: para
|
||||
#: architecture.xml:130
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"(Optional) A single-threaded, short-lived object used by the application to "
|
||||
"specify atomic units of work. Abstracts application from underlying JDBC, "
|
||||
"JTA or CORBA transaction. A <literal>Session</literal> might span several "
|
||||
"<literal>Transaction</literal>s in some cases. However, transaction "
|
||||
"demarcation, either using the underlying API or <literal>Transaction</"
|
||||
"literal>, is never optional!"
|
||||
msgstr ""
|
||||
"(オプション)原子性を持つ作業単位(Unit of Work)を指定するために、アプリケー"
|
||||
"ションが使用する、 シングルスレッドで短命なオブジェクト。 下に位置するJDBC、"
|
||||
"JTA、CORBAトランザクションからアプリケーションを抽象化します。 "
|
||||
"<literal>Session</literal> は、時には いくつかの <literal>Transaction</"
|
||||
"literal> をまたがるかもしれません。 しかし、下の層のAPIを使うにせよ、 "
|
||||
"<literal>Transaction</literal> を使うにせよ、 トランザクション境界を設定する"
|
||||
"ことは、決してオプションではありません!。"
|
||||
|
||||
#: index.docbook:141
|
||||
msgid "ConnectionProvider (<literal>org.hibernate.connection.ConnectionProvider</literal>)"
|
||||
#. Tag: term
|
||||
#: architecture.xml:141
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"ConnectionProvider (<literal>org.hibernate.connection.ConnectionProvider</"
|
||||
"literal>)"
|
||||
msgstr ""
|
||||
"ConnectionProvider (<literal>org.hibernate.connection.ConnectionProvider</"
|
||||
"literal>)"
|
||||
|
||||
#: index.docbook:143
|
||||
msgid "(Optional) A factory for (and pool of) JDBC connections. Abstracts application from underlying <literal>Datasource</literal> or <literal>DriverManager</literal>. Not exposed to application, but can be extended/implemented by the developer."
|
||||
#. Tag: para
|
||||
#: architecture.xml:143
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"(Optional) A factory for (and pool of) JDBC connections. Abstracts "
|
||||
"application from underlying <literal>Datasource</literal> or "
|
||||
"<literal>DriverManager</literal>. Not exposed to application, but can be "
|
||||
"extended/implemented by the developer."
|
||||
msgstr ""
|
||||
"(オプション)JDBCコネクション(とそのプール)のファクトリ。 下の層に位置する "
|
||||
"<literal>Datasource</literal> や <literal>DriverManager</literal> からアプリ"
|
||||
"ケーションを抽象化します。 アプリケーションには公開されませんが、開発者が継承"
|
||||
"または実装することは可能です。"
|
||||
|
||||
#: index.docbook:151
|
||||
msgid "TransactionFactory (<literal>org.hibernate.TransactionFactory</literal>)"
|
||||
#. Tag: term
|
||||
#: architecture.xml:151
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"TransactionFactory (<literal>org.hibernate.TransactionFactory</literal>)"
|
||||
msgstr ""
|
||||
"TransactionFactory (<literal>org.hibernate.TransactionFactory</literal>)"
|
||||
|
||||
#: index.docbook:153
|
||||
msgid "(Optional) A factory for <literal>Transaction</literal> instances. Not exposed to the application, but can be extended/implemented by the developer."
|
||||
#. Tag: para
|
||||
#: architecture.xml:153
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"(Optional) A factory for <literal>Transaction</literal> instances. Not "
|
||||
"exposed to the application, but can be extended/implemented by the developer."
|
||||
msgstr ""
|
||||
"(オプション) <literal>Transaction</literal> インスタンスのファクトリ。 アプリ"
|
||||
"ケーションには公開されませんが、開発者が継承または実装することは可能です。"
|
||||
|
||||
#: index.docbook:160
|
||||
#. Tag: emphasis
|
||||
#: architecture.xml:160
|
||||
#, no-c-format
|
||||
msgid "Extension Interfaces"
|
||||
msgstr ""
|
||||
msgstr "Extension Interfaces"
|
||||
|
||||
#: index.docbook:162
|
||||
msgid "Hibernate offers many optional extension interfaces you can implement to customize the behavior of your persistence layer. See the API documentation for details."
|
||||
#. Tag: para
|
||||
#: architecture.xml:162
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Hibernate offers many optional extension interfaces you can implement to "
|
||||
"customize the behavior of your persistence layer. See the API documentation "
|
||||
"for details."
|
||||
msgstr ""
|
||||
"Hibernateは、永続層の振る舞いをカスタマイズするために、 多くのオプション拡張"
|
||||
"インタフェースを用意しています。 詳細はAPIドキュメントを参照してください。"
|
||||
|
||||
#: index.docbook:171
|
||||
msgid "Given a \"lite\" architecture, the application bypasses the <literal>Transaction</literal>/<literal>TransactionFactory</literal> and/or <literal>ConnectionProvider</literal> APIs to talk to JTA or JDBC directly."
|
||||
#. Tag: para
|
||||
#: architecture.xml:171
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Given a \"lite\" architecture, the application bypasses the "
|
||||
"<literal>Transaction</literal>/<literal>TransactionFactory</literal> and/or "
|
||||
"<literal>ConnectionProvider</literal> APIs to talk to JTA or JDBC directly."
|
||||
msgstr ""
|
||||
"「軽い」アーキテクチャでは、アプリケーションは直接JTAやJDBCと対話するため"
|
||||
"に、 <literal>Transaction</literal> や <literal>TransactionFactory</literal> "
|
||||
"や <literal>ConnectionProvider</literal> をバイパスします。"
|
||||
|
||||
#: index.docbook:179
|
||||
#. Tag: title
|
||||
#: architecture.xml:179
|
||||
#, no-c-format
|
||||
msgid "Instance states"
|
||||
msgstr ""
|
||||
msgstr "インスタンスの状態"
|
||||
|
||||
#: index.docbook:180
|
||||
msgid "An instance of a persistent classes may be in one of three different states, which are defined with respect to a <emphasis>persistence context</emphasis>. The Hibernate <literal>Session</literal> object is the persistence context:"
|
||||
#. Tag: para
|
||||
#: architecture.xml:180
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"An instance of a persistent classes may be in one of three different states, "
|
||||
"which are defined with respect to a <emphasis>persistence context</"
|
||||
"emphasis>. The Hibernate <literal>Session</literal> object is the "
|
||||
"persistence context:"
|
||||
msgstr ""
|
||||
"永続クラスのインスタンスは、次の3つの異なる状態のどれかになります。 それ"
|
||||
"は、 <emphasis>永続コンテキスト</emphasis> によって決まります。 Hibernateの "
|
||||
"<literal>Session</literal> オブジェクトが、永続コンテキストになります。"
|
||||
|
||||
#: index.docbook:188
|
||||
#. Tag: term
|
||||
#: architecture.xml:188
|
||||
#, no-c-format
|
||||
msgid "transient"
|
||||
msgstr ""
|
||||
msgstr "transient"
|
||||
|
||||
#: index.docbook:190
|
||||
msgid "The instance is not, and has never been associated with any persistence context. It has no persistent identity (primary key value)."
|
||||
#. Tag: para
|
||||
#: architecture.xml:190
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"The instance is not, and has never been associated with any persistence "
|
||||
"context. It has no persistent identity (primary key value)."
|
||||
msgstr ""
|
||||
"この状態のインスタンスは、現在もそして過去においても、 永続コンテキストに関連"
|
||||
"づいていません。また、永続ID(主キーの値)を 持っていません。"
|
||||
|
||||
#: index.docbook:198
|
||||
#. Tag: term
|
||||
#: architecture.xml:198
|
||||
#, no-c-format
|
||||
msgid "persistent"
|
||||
msgstr ""
|
||||
msgstr "persistent"
|
||||
|
||||
#: index.docbook:200
|
||||
msgid "The instance is currently associated with a persistence context. It has a persistent identity (primary key value) and, perhaps, a corresponding row in the database. For a particular persistence context, Hibernate <emphasis>guarantees</emphasis> that persistent identity is equivalent to Java identity (in-memory location of the object)."
|
||||
#. Tag: para
|
||||
#: architecture.xml:200
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"The instance is currently associated with a persistence context. It has a "
|
||||
"persistent identity (primary key value) and, perhaps, a corresponding row in "
|
||||
"the database. For a particular persistence context, Hibernate "
|
||||
"<emphasis>guarantees</emphasis> that persistent identity is equivalent to "
|
||||
"Java identity (in-memory location of the object)."
|
||||
msgstr ""
|
||||
"この状態のインスタンスは、その時点で永続コンテキストに関連づいています。 ま"
|
||||
"た、永続ID(主キーの値)を持ち、 たいていはデータベースに対応する行を持ってい"
|
||||
"るでしょう。 個々の永続コンテキストのなかでは、永続IDが JavaのID(オブジェク"
|
||||
"トのメモリ上の位置)と同じであることを Hibernateが <emphasis>保証</emphasis> "
|
||||
"します。"
|
||||
|
||||
#: index.docbook:212
|
||||
#. Tag: term
|
||||
#: architecture.xml:212
|
||||
#, no-c-format
|
||||
msgid "detached"
|
||||
msgstr ""
|
||||
msgstr "detached"
|
||||
|
||||
#: index.docbook:214
|
||||
msgid "The instance was once associated with a persistence context, but that context was closed, or the instance was serialized to another process. It has a persistent identity and, perhaps, a corrsponding row in the database. For detached instances, Hibernate makes no guarantees about the relationship between persistent identity and Java identity."
|
||||
#. Tag: para
|
||||
#: architecture.xml:214
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"The instance was once associated with a persistence context, but that "
|
||||
"context was closed, or the instance was serialized to another process. It "
|
||||
"has a persistent identity and, perhaps, a corrsponding row in the database. "
|
||||
"For detached instances, Hibernate makes no guarantees about the relationship "
|
||||
"between persistent identity and Java identity."
|
||||
msgstr ""
|
||||
"この状態のインスタンスは、かつて永続コンテキストに関連づけられたが、 そのコン"
|
||||
"テキストがクローズされたか、あるいは、 他のプロセスにそのインスタンスがシリア"
|
||||
"ライズされたかです。 このインスタンスは、永続IDを持ち、たいていはデータベース"
|
||||
"に 対応する行を持っているでしょう。分離インスタンスに対しては、 永続IDとJava"
|
||||
"のIDとの関連は、Hibernateが保証しません。"
|
||||
|
||||
#: index.docbook:229
|
||||
#. Tag: title
|
||||
#: architecture.xml:229
|
||||
#, no-c-format
|
||||
msgid "JMX Integration"
|
||||
msgstr ""
|
||||
msgstr "JMXとの統合"
|
||||
|
||||
#: index.docbook:231
|
||||
msgid "JMX is the J2EE standard for management of Java components. Hibernate may be managed via a JMX standard service. We provide an MBean implementation in the distribution, <literal>org.hibernate.jmx.HibernateService</literal>."
|
||||
#. Tag: para
|
||||
#: architecture.xml:231
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"JMX is the J2EE standard for management of Java components. Hibernate may be "
|
||||
"managed via a JMX standard service. We provide an MBean implementation in "
|
||||
"the distribution, <literal>org.hibernate.jmx.HibernateService</literal>."
|
||||
msgstr ""
|
||||
"JMXはJavaコンポーネント管理のJ2EE標準です。 JMX標準サービスを通して、"
|
||||
"Hibernateは管理されます。 ディストリビューションの中に <literal>org."
|
||||
"hibernate.jmx.HibernateService</literal> という MBean実装を用意しています。"
|
||||
|
||||
#: index.docbook:237
|
||||
msgid "For an example how to deploy Hibernate as a JMX service on the JBoss Application Server, please see the JBoss User Guide. On JBoss AS, you also get these benefits if you deploy using JMX:"
|
||||
#. Tag: para
|
||||
#: architecture.xml:237
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"For an example how to deploy Hibernate as a JMX service on the JBoss "
|
||||
"Application Server, please see the JBoss User Guide. On JBoss AS, you also "
|
||||
"get these benefits if you deploy using JMX:"
|
||||
msgstr ""
|
||||
"JBoss アプリケーションサーバー上にHibernateをJMXサービスとしてデプロイする方"
|
||||
"法の例としては、 JBoss ユーザガイドを参照してください。 JBoss アプリケーショ"
|
||||
"ンサーバーにおいて、 JMXを使ってデプロイすると、次のメリットが得られます。"
|
||||
|
||||
#: index.docbook:245
|
||||
msgid "<emphasis>Session Management:</emphasis> The Hibernate <literal>Session</literal>'s life cycle can be automatically bound to the scope of a JTA transaction. This means you no longer have to manually open and close the <literal>Session</literal>, this becomes the job of a JBoss EJB interceptor. You also don't have to worry about transaction demarcation in your code anymore (unless you'd like to write a portable persistence layer of course, use the optional Hibernate <literal>Transaction</literal> API for this). You call the <literal>HibernateContext</literal> to access a <literal>Session</literal>."
|
||||
#. Tag: para
|
||||
#: architecture.xml:245
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<emphasis>Session Management:</emphasis> The Hibernate <literal>Session</"
|
||||
"literal>'s life cycle can be automatically bound to the scope of a JTA "
|
||||
"transaction. This means you no longer have to manually open and close the "
|
||||
"<literal>Session</literal>, this becomes the job of a JBoss EJB interceptor. "
|
||||
"You also don't have to worry about transaction demarcation in your code "
|
||||
"anymore (unless you'd like to write a portable persistence layer of course, "
|
||||
"use the optional Hibernate <literal>Transaction</literal> API for this). You "
|
||||
"call the <literal>HibernateContext</literal> to access a <literal>Session</"
|
||||
"literal>."
|
||||
msgstr ""
|
||||
"<emphasis>セッション管理:</emphasis> Hibernateの <literal>Session</literal> "
|
||||
"のライフサイクルは、 自動的にJTAトランザクションのスコープに結びつけられま"
|
||||
"す。これは、もはや手動で <literal>Session</literal> をオープンしたり、クロー"
|
||||
"ズしたりする必要がないことを意味します。 これは、JBoss EJB インターセプタの仕"
|
||||
"事になります。 また、コードのどこでトランザクション境界を設定するかについ"
|
||||
"て、 もはや悩む必要がありません(もちろん移植可能な永続層を書かかなくていいの"
|
||||
"ならば、 オプションのHibernateの <literal>Transaction</literal> を使用してく"
|
||||
"ださい。) <literal>Session</literal> にアクセスするためには、 "
|
||||
"<literal>HibernateContext</literal> を コールしてください。"
|
||||
|
||||
#: index.docbook:257
|
||||
msgid "<emphasis>HAR deployment:</emphasis> Usually you deploy the Hibernate JMX service using a JBoss service deployment descriptor (in an EAR and/or SAR file), it supports all the usual configuration options of a Hibernate <literal>SessionFactory</literal>. However, you still have to name all your mapping files in the deployment descriptor. If you decide to use the optional HAR deployment, JBoss will automatically detect all mapping files in your HAR file."
|
||||
#. Tag: para
|
||||
#: architecture.xml:257
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<emphasis>HAR deployment:</emphasis> Usually you deploy the Hibernate JMX "
|
||||
"service using a JBoss service deployment descriptor (in an EAR and/or SAR "
|
||||
"file), it supports all the usual configuration options of a Hibernate "
|
||||
"<literal>SessionFactory</literal>. However, you still have to name all your "
|
||||
"mapping files in the deployment descriptor. If you decide to use the "
|
||||
"optional HAR deployment, JBoss will automatically detect all mapping files "
|
||||
"in your HAR file."
|
||||
msgstr ""
|
||||
"<emphasis>HAR デプロイ:</emphasis> 通常、(EAR または SAR ファイルにある)"
|
||||
"JBoss サービス デプロイメントディスクリプタを使って、Hibernate JMX サービスを"
|
||||
"デプロイします。 それは、Hibernateの <literal>SessionFactory</literal> の全て"
|
||||
"の一般的な設定オプションを サポートします。しかし依然としてデプロイメントディ"
|
||||
"スクリプタのなかにすべてのマッピングファイルの 名前を挙げる必要があります。 "
|
||||
"もし、オプションのHARデプロイメントを使うことを決めたなら、 JBossは自動的に"
|
||||
"HARファイルのなかの全てのマッピングファイルを検出します。"
|
||||
|
||||
#: index.docbook:268
|
||||
msgid "Consult the JBoss AS user guide for more information about these options."
|
||||
#. Tag: para
|
||||
#: architecture.xml:268
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Consult the JBoss AS user guide for more information about these options."
|
||||
msgstr ""
|
||||
"これらのオプションについての詳細な情報は、JBossアプリケーションサーバユーザガ"
|
||||
"イドを 参考にしてください。"
|
||||
|
||||
#: index.docbook:272
|
||||
msgid "Another feature available as a JMX service are runtime Hibernate statistics. See <xref linkend=\"configuration-optional-statistics\"/>."
|
||||
#. Tag: para
|
||||
#: architecture.xml:272
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Another feature available as a JMX service are runtime Hibernate statistics. "
|
||||
"See <xref linkend=\"configuration-optional-statistics\"/>."
|
||||
msgstr ""
|
||||
"JMXサービスとして利用可能な他の機能に、Hibernate実行時統計情報があります。 "
|
||||
"<xref linkend=\"configuration-optional-statistics\"/> を見てください。"
|
||||
|
||||
#: index.docbook:279
|
||||
#. Tag: title
|
||||
#: architecture.xml:279
|
||||
#, no-c-format
|
||||
msgid "JCA Support"
|
||||
msgstr ""
|
||||
msgstr "JCA サポート"
|
||||
|
||||
#: index.docbook:280
|
||||
msgid "Hibernate may also be configured as a JCA connector. Please see the website for more details. Please note that Hibernate JCA support is still considered experimental."
|
||||
#. Tag: para
|
||||
#: architecture.xml:280
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Hibernate may also be configured as a JCA connector. Please see the website "
|
||||
"for more details. Please note that Hibernate JCA support is still considered "
|
||||
"experimental."
|
||||
msgstr ""
|
||||
"Hibernate は JCA コネクタとしても設定できます。詳細については、Webサイトを見"
|
||||
"てください。 Hibernate JCA サポートは、今のところ実験段階として考えられている"
|
||||
"ことに注意してください。"
|
||||
|
||||
#: index.docbook:287
|
||||
#. Tag: title
|
||||
#: architecture.xml:287
|
||||
#, no-c-format
|
||||
msgid "Contextual Sessions"
|
||||
msgstr "コンテキスト上のセッション"
|
||||
|
||||
#. Tag: para
|
||||
#: architecture.xml:288
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Most applications using Hibernate need some form of \"contextual\" sessions, "
|
||||
"where a given session is in effect throughout the scope of a given context. "
|
||||
"However, across applications the definition of what constitutes a context is "
|
||||
"typically different; and different contexts define different scopes to the "
|
||||
"notion of current. Applications using Hibernate prior to version 3.0 tended "
|
||||
"to utilize either home-grown <literal>ThreadLocal</literal>-based contextual "
|
||||
"sessions, helper classes such as <literal>HibernateUtil</literal>, or "
|
||||
"utilized third-party frameworks (such as Spring or Pico) which provided "
|
||||
"proxy/interception-based contextual sessions."
|
||||
msgstr ""
|
||||
"Hibernate を使ったアプリケーションは、ほとんど、なんらかの形で\"コンテキスト"
|
||||
"上の\"セッションが必要になります。 「コンテキスト上のセッション」は、特定のコ"
|
||||
"ンテキストのスコープのなかで有効なセッションのことです。 しかし、通常アプリ"
|
||||
"ケーションごとにコンテキストを構成するものの定義は異なります。 しかも、異なる"
|
||||
"複数のコンテキストは、現時点に対して異なるスコープを定義します。 バージョン"
|
||||
"3.0より前の Hibernate では、自作の <literal>ThreadLocal</literal> ベースの"
|
||||
"「コンテキスト上のセッション」を 利用するか、 <literal>HibernateUtil</"
|
||||
"literal> のようなヘルパークラスを利用するか、 proxy/interception ベースの「コ"
|
||||
"ンテキスト上のセッション」を提供する (Spring や Pico のような)サードパー"
|
||||
"ティのフレームワークを利用するかのいずれかでした。"
|
||||
|
||||
#: index.docbook:288
|
||||
msgid "Most applications using Hibernate need some form of \"contextual\" sessions, where a given session is in effect throughout the scope of a given context. However, across applications the definition of what constitutes a context is typically different; and different contexts define different scopes to the notion of current. Applications using Hibernate prior to version 3.0 tended to utilize either home-grown <literal>ThreadLocal</literal>-based contextual sessions, helper classes such as <literal>HibernateUtil</literal>, or utilized third-party frameworks (such as Spring or Pico) which provided proxy/interception-based contextual sessions."
|
||||
#. Tag: para
|
||||
#: architecture.xml:297
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Starting with version 3.0.1, Hibernate added the <literal>SessionFactory."
|
||||
"getCurrentSession()</literal> method. Initially, this assumed usage of "
|
||||
"<literal>JTA</literal> transactions, where the <literal>JTA</literal> "
|
||||
"transaction defined both the scope and context of a current session. The "
|
||||
"Hibernate team maintains that, given the maturity of the numerous stand-"
|
||||
"alone <literal>JTA TransactionManager</literal> implementations out there, "
|
||||
"most (if not all) applications should be using <literal>JTA</literal> "
|
||||
"transaction management whether or not they are deployed into a "
|
||||
"<literal>J2EE</literal> container. Based on that, the <literal>JTA</literal>-"
|
||||
"based contextual sessions is all you should ever need to use."
|
||||
msgstr ""
|
||||
"バージョン 3.0.1 から、Hibernate には <literal>SessionFactory."
|
||||
"getCurrentSession()</literal> が 加わりました。 これは、 <literal>JTA</"
|
||||
"literal> トランザクションの使用を前提にしています。 <literal>JTA</literal> ト"
|
||||
"ランザクションは、現在のセッションのスコープとコンテキストの両方を定義しま"
|
||||
"す。 Hibernate チームは、次のことを主張します。 巨大なスタンドアロンの "
|
||||
"<literal>JTA TransactionManager</literal> 実装が成熟したら、 <literal>J2EE</"
|
||||
"literal> コンテナ上にデプロイされるかどうかにかかわらず、 ほとんどの(すべて"
|
||||
"とは言わないが)アプリケーションが、 <literal>JTA</literal> トランザクション"
|
||||
"管理を使用すべきであると。 この考えに基づくと、 <literal>JTA</literal> ベース"
|
||||
"の「コンテキスト上のセッション」を 使うしかないでしょう。"
|
||||
|
||||
#: index.docbook:297
|
||||
msgid "Starting with version 3.0.1, Hibernate added the <literal>SessionFactory.getCurrentSession()</literal> method. Initially, this assumed usage of <literal>JTA</literal> transactions, where the <literal>JTA</literal> transaction defined both the scope and context of a current session. The Hibernate team maintains that, given the maturity of the numerous stand-alone <literal>JTA TransactionManager</literal> implementations out there, most (if not all) applications should be using <literal>JTA</literal> transaction management whether or not they are deployed into a <literal>J2EE</literal> container. Based on that, the <literal>JTA</literal>-based contextual sessions is all you should ever need to use."
|
||||
#. Tag: para
|
||||
#: architecture.xml:307
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"However, as of version 3.1, the processing behind <literal>SessionFactory."
|
||||
"getCurrentSession()</literal> is now pluggable. To that end, a new extension "
|
||||
"interface (<literal>org.hibernate.context.CurrentSessionContext</literal>) "
|
||||
"and a new configuration parameter (<literal>hibernate."
|
||||
"current_session_context_class</literal>) have been added to allow "
|
||||
"pluggability of the scope and context of defining current sessions."
|
||||
msgstr ""
|
||||
"しかし、バージョン 3.1 からは、 <literal>SessionFactory.getCurrentSession()</"
|
||||
"literal> の後の処理が、 プラガブルになりました。 これを受けて、現在のセッショ"
|
||||
"ンを定義するスコープとコンテキストのプラガビリティを可能にするために、 新しい"
|
||||
"拡張インタフェース ( <literal>org.hibernate.context.CurrentSessionContext</"
|
||||
"literal> ) と 新しい構成パラメータ ( <literal>hibernate."
|
||||
"current_session_context_class</literal> ) が追加されました。"
|
||||
|
||||
#: index.docbook:307
|
||||
msgid "However, as of version 3.1, the processing behind <literal>SessionFactory.getCurrentSession()</literal> is now pluggable. To that end, a new extension interface (<literal>org.hibernate.context.CurrentSessionContext</literal>) and a new configuration parameter (<literal>hibernate.current_session_context_class</literal>) have been added to allow pluggability of the scope and context of defining current sessions."
|
||||
#. Tag: para
|
||||
#: architecture.xml:314
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"See the Javadocs for the <literal>org.hibernate.context."
|
||||
"CurrentSessionContext</literal> interface for a detailed discussion of its "
|
||||
"contract. It defines a single method, <literal>currentSession()</literal>, "
|
||||
"by which the implementation is responsible for tracking the current "
|
||||
"contextual session. Out-of-the-box, Hibernate comes with three "
|
||||
"implementations of this interface."
|
||||
msgstr ""
|
||||
"<literal>org.hibernate.context.CurrentSessionContext</literal> インタフェース"
|
||||
"の規約についての 詳細な内容は Javadoc を参照してください。 それには、 "
|
||||
"<literal>currentSession()</literal> という1つのメソッドが定義されており、 そ"
|
||||
"の実装は、現在の「コンテキスト上のセッション」を追跡することに責任を持ちま"
|
||||
"す。 そのまま使えるように、Hibernateはこのインタフェースの実装を2つ提供してい"
|
||||
"ます。"
|
||||
|
||||
#: index.docbook:314
|
||||
msgid "See the Javadocs for the <literal>org.hibernate.context.CurrentSessionContext</literal> interface for a detailed discussion of its contract. It defines a single method, <literal>currentSession()</literal>, by which the implementation is responsible for tracking the current contextual session. Out-of-the-box, Hibernate comes with three implementations of this interface."
|
||||
#. Tag: para
|
||||
#: architecture.xml:324
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<literal>org.hibernate.context.JTASessionContext</literal> - current "
|
||||
"sessions are tracked and scoped by a <literal>JTA</literal> transaction. The "
|
||||
"processing here is exactly the same as in the older JTA-only approach. See "
|
||||
"the Javadocs for details."
|
||||
msgstr ""
|
||||
"<literal>org.hibernate.context.JTASessionContext</literal> - <literal>JTA</"
|
||||
"literal> トランザクションによって、現在のセッションが追跡され、 スコープを決"
|
||||
"められます。この処理は、古いJTAだけのアプローチとまったく同じです。 詳細は"
|
||||
"Javadocを参照してください。"
|
||||
|
||||
#: index.docbook:324
|
||||
msgid "<literal>org.hibernate.context.JTASessionContext</literal> - current sessions are tracked and scoped by a <literal>JTA</literal> transaction. The processing here is exactly the same as in the older JTA-only approach. See the Javadocs for details."
|
||||
#. Tag: para
|
||||
#: architecture.xml:332
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<literal>org.hibernate.context.ThreadLocalSessionContext</literal> - current "
|
||||
"sessions are tracked by thread of execution. Again, see the Javadocs for "
|
||||
"details."
|
||||
msgstr ""
|
||||
"<literal>org.hibernate.context.ThreadLocalSessionContext</literal> - スレッド"
|
||||
"の実行によって、現在のセッションが追跡されます。 詳細はJavadocを参照してくだ"
|
||||
"さい。"
|
||||
|
||||
#: index.docbook:332
|
||||
msgid "<literal>org.hibernate.context.ThreadLocalSessionContext</literal> - current sessions are tracked by thread of execution. Again, see the Javadocs for details."
|
||||
#. Tag: para
|
||||
#: architecture.xml:338
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<literal>org.hibernate.context.ManagedSessionContext</literal> - current "
|
||||
"sessions are tracked by thread of execution. However, you are responsible to "
|
||||
"bind and unbind a <literal>Session</literal> instance with static methods on "
|
||||
"this class, it does never open, flush, or close a <literal>Session</literal>."
|
||||
msgstr ""
|
||||
"<literal>org.hibernate.context.ManagedSessionContext</literal> - スレッドの実"
|
||||
"行によって、現在のセッションが追跡されます。 しかし、このクラスのstaticメソッ"
|
||||
"ドで <literal>Session</literal> インスタンスを バインド/アンバインドする責任"
|
||||
"はあなたにあります。 これは決して <literal>Session</literal> をオープン、フ"
|
||||
"ラッシュ、クローズしません。"
|
||||
|
||||
#: index.docbook:338
|
||||
msgid "<literal>org.hibernate.context.ManagedSessionContext</literal> - current sessions are tracked by thread of execution. However, you are responsible to bind and unbind a <literal>Session</literal> instance with static methods on this class, it does never open, flush, or close a <literal>Session</literal>."
|
||||
#. Tag: para
|
||||
#: architecture.xml:347
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"The first two implementations provide a \"one session - one database "
|
||||
"transaction\" programming model, also known and used as <emphasis>session-"
|
||||
"per-request</emphasis>. The beginning and end of a Hibernate session is "
|
||||
"defined by the duration of a database transaction. If you use programatic "
|
||||
"transaction demarcation in plain JSE without JTA, you are adviced to use the "
|
||||
"Hibernate <literal>Transaction</literal> API to hide the underlying "
|
||||
"transaction system from your code. If you use JTA, use the JTA interfaces to "
|
||||
"demarcate transactions. If you execute in an EJB container that supports "
|
||||
"CMT, transaction boundaries are defined declaratively and you don't need any "
|
||||
"transaction or session demarcation operations in your code. Refer to <xref "
|
||||
"linkend=\"transactions\"/> for more information and code examples."
|
||||
msgstr ""
|
||||
"始めの2つの実装は、\"1セッション - 1データベーストランザクション\" プログラミ"
|
||||
"ングモデルを提供します。 これは <emphasis>リクエストごとのセッション"
|
||||
"(session-per-request)</emphasis> としても知られており、使われています。 "
|
||||
"Hibernate セッションの開始と終了は、データベーストランザクションの期間で決ま"
|
||||
"ります。 JTAを使わない普通のJSEで、プログラム上のトランザクション境界設定を行"
|
||||
"うなら、 コードから基礎のトランザクションシステムを隠蔽するために、 "
|
||||
"Hibernate <literal>Transaction</literal> APIを使うとよいでしょう。 JTAを使う"
|
||||
"なら、トランザクションの境界設定には、JTAインターフェイスを使ってください。 "
|
||||
"CMTをサポートするEJBコンテナで実行するつもりなら、トランザクション境界は宣言"
|
||||
"的に定義できるため、 コード上でトランザクションやセッションの境界を設定する必"
|
||||
"要はありません。 さらに詳細な情報やコードの例は、 <xref linkend="
|
||||
"\"transactions\"/> を参照してください。"
|
||||
|
||||
#: index.docbook:347
|
||||
msgid "The first two implementations provide a \"one session - one database transaction\" programming model, also known and used as <emphasis>session-per-request</emphasis>. The beginning and end of a Hibernate session is defined by the duration of a database transaction. If you use programatic transaction demarcation in plain JSE without JTA, you are adviced to use the Hibernate <literal>Transaction</literal> API to hide the underlying transaction system from your code. If you use JTA, use the JTA interfaces to demarcate transactions. If you execute in an EJB container that supports CMT, transaction boundaries are defined declaratively and you don't need any transaction or session demarcation operations in your code. Refer to <xref linkend=\"transactions\"/> for more information and code examples."
|
||||
#. Tag: para
|
||||
#: architecture.xml:359
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"The <literal>hibernate.current_session_context_class</literal> configuration "
|
||||
"parameter defines which <literal>org.hibernate.context."
|
||||
"CurrentSessionContext</literal> implementation should be used. Note that for "
|
||||
"backwards compatibility, if this config param is not set but a <literal>org."
|
||||
"hibernate.transaction.TransactionManagerLookup</literal> is configured, "
|
||||
"Hibernate will use the <literal>org.hibernate.context.JTASessionContext</"
|
||||
"literal>. Typically, the value of this parameter would just name the "
|
||||
"implementation class to use; for the three out-of-the-box implementations, "
|
||||
"however, there are three corresponding short names, \"jta\", \"thread\", and "
|
||||
"\"managed\"."
|
||||
msgstr ""
|
||||
|
||||
#: index.docbook:359
|
||||
msgid "The <literal>hibernate.current_session_context_class</literal> configuration parameter defines which <literal>org.hibernate.context.CurrentSessionContext</literal> implementation should be used. Note that for backwards compatibility, if this config param is not set but a <literal>org.hibernate.transaction.TransactionManagerLookup</literal> is configured, Hibernate will use the <literal>org.hibernate.context.JTASessionContext</literal>. Typically, the value of this parameter would just name the implementation class to use; for the three out-of-the-box implementations, however, there are three corresponding short names, \"jta\", \"thread\", and \"managed\"."
|
||||
msgstr ""
|
||||
|
||||
msgid "ROLES_OF_TRANSLATORS"
|
||||
msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
|
||||
|
||||
msgid "CREDIT_FOR_TRANSLATORS"
|
||||
msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
|
||||
|
||||
"<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\"というそれぞれの省略名も用意されていま"
|
||||
"す。"
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,374 +1,630 @@
|
|||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2007-10-25 07:47+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
#: index.docbook:5
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#. Tag: title
|
||||
#: batch.xml:5
|
||||
#, no-c-format
|
||||
msgid "Batch processing"
|
||||
msgstr "バッチ処理"
|
||||
|
||||
#: index.docbook:7
|
||||
msgid "A naive approach to inserting 100 000 rows in the database using Hibernate might look like this:"
|
||||
msgstr "Hibernateを使ってデータベースに100,000行を挿入する愚直な方法は、このようなものです:"
|
||||
|
||||
#: index.docbook:12
|
||||
#. Tag: para
|
||||
#: batch.xml:7
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
"for ( int i=0; i<100000; i++ ) {\n"
|
||||
" Customer customer = new Customer(.....);\n"
|
||||
" session.save(customer);\n"
|
||||
"}\n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
"A naive approach to inserting 100 000 rows in the database using Hibernate "
|
||||
"might look like this:"
|
||||
msgstr ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();
\n"
|
||||
"Transaction tx = session.beginTransaction();
\n"
|
||||
"for ( int i=0; i<100000; i++ ) {
\n"
|
||||
" Customer customer = new Customer(.....);
\n"
|
||||
" session.save(customer);
\n"
|
||||
"}
\n"
|
||||
"tx.commit();
\n"
|
||||
"session.close();]]>"
|
||||
"Hibernateを使ってデータベースに100,000行を挿入する愚直な方法は、このようなも"
|
||||
"のです:"
|
||||
|
||||
#: index.docbook:14
|
||||
msgid "This would fall over with an <literal>OutOfMemoryException</literal> somewhere around the 50 000th row. That's because Hibernate caches all the newly inserted <literal>Customer</literal> instances in the session-level cache."
|
||||
msgstr "これは50,000番目の行のあたりで <literal>OutOfMemoryException</literal> で失敗するでしょう。 Hibernateがセッションレベルキャッシュで、 新しく挿入されたすべての <literal>Customer</literal> インスタンスをキャッシュするからです。"
|
||||
#. Tag: programlisting
|
||||
#: batch.xml:12
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
"for ( int i=0; i<100000; i++ ) {\n"
|
||||
" Customer customer = new Customer(.....);\n"
|
||||
" session.save(customer);\n"
|
||||
"}\n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
msgstr ""
|
||||
|
||||
#: index.docbook:20
|
||||
msgid "In this chapter we'll show you how to avoid this problem. First, however, if you are doing batch processing, it is absolutely critical that you enable the use of JDBC batching, if you intend to achieve reasonable performance. Set the JDBC batch size to a reasonable number (say, 10-50):"
|
||||
msgstr "この章では、この問題を回避する方法を紹介します。 しかしバッチ処理をするなら、JDBCバッチが使用可能であることが非常に重要です。 そうでなければ手頃なパフォーマンスが得られません。 JDBCバッチサイズを手頃な数値(例えば、10から50)に設定してください:"
|
||||
#. Tag: para
|
||||
#: batch.xml:14
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"This would fall over with an <literal>OutOfMemoryException</literal> "
|
||||
"somewhere around the 50 000th row. That's because Hibernate caches all the "
|
||||
"newly inserted <literal>Customer</literal> instances in the session-level "
|
||||
"cache."
|
||||
msgstr ""
|
||||
"これは50,000番目の行のあたりで <literal>OutOfMemoryException</literal> で失敗"
|
||||
"するでしょう。 Hibernateがセッションレベルキャッシュで、 新しく挿入されたすべ"
|
||||
"ての <literal>Customer</literal> インスタンスをキャッシュするからです。"
|
||||
|
||||
#: index.docbook:27
|
||||
#. Tag: para
|
||||
#: batch.xml:20
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"In this chapter we'll show you how to avoid this problem. First, however, if "
|
||||
"you are doing batch processing, it is absolutely critical that you enable "
|
||||
"the use of JDBC batching, if you intend to achieve reasonable performance. "
|
||||
"Set the JDBC batch size to a reasonable number (say, 10-50):"
|
||||
msgstr ""
|
||||
"この章では、この問題を回避する方法を紹介します。 しかしバッチ処理をするなら、"
|
||||
"JDBCバッチが使用可能であることが非常に重要です。 そうでなければ手頃なパフォー"
|
||||
"マンスが得られません。 JDBCバッチサイズを手頃な数値(例えば、10から50)に設定"
|
||||
"してください:"
|
||||
|
||||
#. Tag: programlisting
|
||||
#: batch.xml:27
|
||||
#, no-c-format
|
||||
msgid "<![CDATA[hibernate.jdbc.batch_size 20]]>"
|
||||
msgstr "<![CDATA[hibernate.jdbc.batch_size 20]]>"
|
||||
msgstr ""
|
||||
|
||||
#: index.docbook:29
|
||||
msgid "Note that Hibernate disables insert batching at the JDBC level transparently if you use an <literal>identiy</literal> identifier generator."
|
||||
msgstr "また二次キャッシュが全く効かないプロセスで、 このような作業をしたいと思うかもしれません:"
|
||||
#. Tag: para
|
||||
#: batch.xml:29
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Note that Hibernate disables insert batching at the JDBC level transparently "
|
||||
"if you use an <literal>identiy</literal> identifier generator."
|
||||
msgstr ""
|
||||
"Note that Hibernate disables insert batching at the JDBC level transparently "
|
||||
"if you use an <literal>identiy</literal> identifier generator."
|
||||
|
||||
#: index.docbook:34
|
||||
msgid "You also might like to do this kind of work in a process where interaction with the second-level cache is completely disabled:"
|
||||
msgstr "<![CDATA[hibernate.cache.use_second_level_cache false]]>"
|
||||
#. Tag: para
|
||||
#: batch.xml:34
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"You also might like to do this kind of work in a process where interaction "
|
||||
"with the second-level cache is completely disabled:"
|
||||
msgstr ""
|
||||
"また二次キャッシュが全く効かないプロセスで、 このような作業をしたいと思うかも"
|
||||
"しれません:"
|
||||
|
||||
#: index.docbook:39
|
||||
#. Tag: programlisting
|
||||
#: batch.xml:39
|
||||
#, no-c-format
|
||||
msgid "<![CDATA[hibernate.cache.use_second_level_cache false]]>"
|
||||
msgstr "しかし、これは絶対に必要というわけではありません。 なぜなら明示的に <literal>CacheMode</literal> を設定して、 二次キャッシュとの相互作用を無効にすることができるからです。"
|
||||
msgstr ""
|
||||
|
||||
#: index.docbook:41
|
||||
msgid "However, this is not absolutely necessary, since we can explicitly set the <literal>CacheMode</literal> to disable interaction with the second-level cache."
|
||||
#. Tag: para
|
||||
#: batch.xml:41
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"However, this is not absolutely necessary, since we can explicitly set the "
|
||||
"<literal>CacheMode</literal> to disable interaction with the second-level "
|
||||
"cache."
|
||||
msgstr ""
|
||||
"しかし、これは絶対に必要というわけではありません。 なぜなら明示的に "
|
||||
"<literal>CacheMode</literal> を設定して、 二次キャッシュとの相互作用を無効に"
|
||||
"することができるからです。"
|
||||
|
||||
#. Tag: title
|
||||
#: batch.xml:47
|
||||
#, no-c-format
|
||||
msgid "Batch inserts"
|
||||
msgstr "バッチ挿入"
|
||||
|
||||
#: index.docbook:47
|
||||
msgid "Batch inserts"
|
||||
msgstr "新しいオブジェクトを永続化するとき、一次キャッシュのサイズを制限するため、 セッションを <literal>flush()</literal> して <literal>clear()</literal> しなければなりません。"
|
||||
|
||||
#: index.docbook:49
|
||||
msgid "When making new objects persistent, you must <literal>flush()</literal> and then <literal>clear()</literal> the session regularly, to control the size of the first-level cache."
|
||||
msgstr ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();
\n"
|
||||
"Transaction tx = session.beginTransaction();
\n"
|
||||
"
\n"
|
||||
"for ( int i=0; i<100000; i++ ) {
\n"
|
||||
" Customer customer = new Customer(.....);
\n"
|
||||
" session.save(customer);
\n"
|
||||
" if ( i % 20 == 0 ) { //20, same as the JDBC batch size
\n"
|
||||
" //flush a batch of inserts and release memory:
\n"
|
||||
" session.flush();
\n"
|
||||
" session.clear();
\n"
|
||||
" }
\n"
|
||||
"}
\n"
|
||||
"
\n"
|
||||
"tx.commit();
\n"
|
||||
"session.close();]]>"
|
||||
|
||||
#: index.docbook:55
|
||||
#. Tag: para
|
||||
#: batch.xml:49
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
" \n"
|
||||
"for ( int i=0; i<100000; i++ ) {\n"
|
||||
" Customer customer = new Customer(.....);\n"
|
||||
" session.save(customer);\n"
|
||||
" if ( i % 20 == 0 ) { //20, same as the JDBC batch size\n"
|
||||
" //flush a batch of inserts and release memory:\n"
|
||||
" session.flush();\n"
|
||||
" session.clear();\n"
|
||||
" }\n"
|
||||
"}\n"
|
||||
" \n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
"When making new objects persistent, you must <literal>flush()</literal> and "
|
||||
"then <literal>clear()</literal> the session regularly, to control the size "
|
||||
"of the first-level cache."
|
||||
msgstr ""
|
||||
"新しいオブジェクトを永続化するとき、一次キャッシュのサイズを制限するため、 "
|
||||
"セッションを <literal>flush()</literal> して <literal>clear()</literal> しな"
|
||||
"ければなりません。"
|
||||
|
||||
#. Tag: programlisting
|
||||
#: batch.xml:55
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
" \n"
|
||||
"for ( int i=0; i<100000; i++ ) {\n"
|
||||
" Customer customer = new Customer(.....);\n"
|
||||
" session.save(customer);\n"
|
||||
" if ( i % 20 == 0 ) { //20, same as the JDBC batch size\n"
|
||||
" //flush a batch of inserts and release memory:\n"
|
||||
" session.flush();\n"
|
||||
" session.clear();\n"
|
||||
" }\n"
|
||||
"}\n"
|
||||
" \n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: title
|
||||
#: batch.xml:60
|
||||
#, no-c-format
|
||||
msgid "Batch updates"
|
||||
msgstr "バッチ更新"
|
||||
|
||||
#: index.docbook:60
|
||||
msgid "Batch updates"
|
||||
msgstr "データを復元したり更新したりするには同じアイディアを適用します。 それに加えて、データの行を多く返すクエリに対して有効な サーバーサイドのカーソルの利点を生かしたければ <literal>scroll()</literal> を使う必要があります。"
|
||||
|
||||
#: index.docbook:62
|
||||
msgid "For retrieving and updating data the same ideas apply. In addition, you need to use <literal>scroll()</literal> to take advantage of server-side cursors for queries that return many rows of data."
|
||||
msgstr ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();
\n"
|
||||
"Transaction tx = session.beginTransaction();
\n"
|
||||
"
\n"
|
||||
"ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")
\n"
|
||||
" .setCacheMode(CacheMode.IGNORE)
\n"
|
||||
" .scroll(ScrollMode.FORWARD_ONLY);
\n"
|
||||
"int count=0;
\n"
|
||||
"while ( customers.next() ) {
\n"
|
||||
" Customer customer = (Customer) customers.get(0);
\n"
|
||||
" customer.updateStuff(...);
\n"
|
||||
" if ( ++count % 20 == 0 ) {
\n"
|
||||
" //flush a batch of updates and release memory:
\n"
|
||||
" session.flush();
\n"
|
||||
" session.clear();
\n"
|
||||
" }
\n"
|
||||
"}
\n"
|
||||
"
\n"
|
||||
"tx.commit();
\n"
|
||||
"session.close();]]>"
|
||||
|
||||
#: index.docbook:68
|
||||
#. Tag: para
|
||||
#: batch.xml:62
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
" \n"
|
||||
"ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
|
||||
" .setCacheMode(CacheMode.IGNORE)\n"
|
||||
" .scroll(ScrollMode.FORWARD_ONLY);\n"
|
||||
"int count=0;\n"
|
||||
"while ( customers.next() ) {\n"
|
||||
" Customer customer = (Customer) customers.get(0);\n"
|
||||
" customer.updateStuff(...);\n"
|
||||
" if ( ++count % 20 == 0 ) {\n"
|
||||
" //flush a batch of updates and release memory:\n"
|
||||
" session.flush();\n"
|
||||
" session.clear();\n"
|
||||
" }\n"
|
||||
"}\n"
|
||||
" \n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
"For retrieving and updating data the same ideas apply. In addition, you need "
|
||||
"to use <literal>scroll()</literal> to take advantage of server-side cursors "
|
||||
"for queries that return many rows of data."
|
||||
msgstr ""
|
||||
"データを復元したり更新したりするには同じアイディアを適用します。 それに加え"
|
||||
"て、データの行を多く返すクエリに対して有効な サーバーサイドのカーソルの利点を"
|
||||
"生かしたければ <literal>scroll()</literal> を使う必要があります。"
|
||||
|
||||
#. Tag: programlisting
|
||||
#: batch.xml:68
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
" \n"
|
||||
"ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
|
||||
" .setCacheMode(CacheMode.IGNORE)\n"
|
||||
" .scroll(ScrollMode.FORWARD_ONLY);\n"
|
||||
"int count=0;\n"
|
||||
"while ( customers.next() ) {\n"
|
||||
" Customer customer = (Customer) customers.get(0);\n"
|
||||
" customer.updateStuff(...);\n"
|
||||
" if ( ++count % 20 == 0 ) {\n"
|
||||
" //flush a batch of updates and release memory:\n"
|
||||
" session.flush();\n"
|
||||
" session.clear();\n"
|
||||
" }\n"
|
||||
"}\n"
|
||||
" \n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: title
|
||||
#: batch.xml:73
|
||||
#, no-c-format
|
||||
msgid "The StatelessSession interface"
|
||||
msgstr "StatelessSessionインターフェイス"
|
||||
|
||||
#: index.docbook:73
|
||||
msgid "The StatelessSession interface"
|
||||
msgstr "また別の方法として、Hibernateはコマンド指向のAPIを用意しています。 これは分離オブジェクトの形で、 データベースとのデータストリームのやり取りに使うことができます。 <literal>StatelessSession</literal> は関連する永続コンテキストを持たず、 高レベルのライフサイクルセマンティクスの多くを提供しません。 特にステートレスセッションは、一時キャッシュを実装せず、 またどのような二次キャッシュやクエリキャッシュとも相互作用しません。 トランザクショナルなwrite-behindや自動ダーティチェックも実装しません。 ステートレスセッションを使って行われる操作が、 関連するインスタンスへカスケードされることは決してありません。 コレクションは、ステートレスセッションからは無視されます。 ステートレスセッションを通して行われる操作は、 Hibernateのイベントモデルやインターセプタの影響を受けません。 一時キャッシュを持たないため、 ステートレスセッションは別名を持つデータに上手く対処できません。 ステートレスセッションは低レベルの抽象化であり、JDBCに非常によく似ています。"
|
||||
|
||||
#: index.docbook:74
|
||||
msgid "Alternatively, Hibernate provides a command-oriented API that may be used for streaming data to and from the database in the form of detached objects. A <literal>StatelessSession</literal> has no persistence context associated with it and does not provide many of the higher-level life cycle semantics. In particular, a stateless session does not implement a first-level cache nor interact with any second-level or query cache. It does not implement transactional write-behind or automatic dirty checking. Operations performed using a stateless session do not ever cascade to associated instances. Collections are ignored by a stateless session. Operations performed via a stateless session bypass Hibernate's event model and interceptors. Stateless sessions are vulnerable to data aliasing effects, due to the lack of a first-level cache. A stateless session is a lower-level abstraction, much closer to the underlying JDBC."
|
||||
msgstr ""
|
||||
"<![CDATA[StatelessSession session = sessionFactory.openStatelessSession();
\n"
|
||||
"Transaction tx = session.beginTransaction();
\n"
|
||||
"
\n"
|
||||
"ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")
\n"
|
||||
" .scroll(ScrollMode.FORWARD_ONLY);
\n"
|
||||
"while ( customers.next() ) {
\n"
|
||||
" Customer customer = (Customer) customers.get(0);
\n"
|
||||
" customer.updateStuff(...);
\n"
|
||||
" session.update(customer);
\n"
|
||||
"}
\n"
|
||||
"
\n"
|
||||
"tx.commit();
\n"
|
||||
"session.close();]]>"
|
||||
|
||||
#: index.docbook:89
|
||||
#. Tag: para
|
||||
#: batch.xml:74
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[StatelessSession session = sessionFactory.openStatelessSession();\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
" \n"
|
||||
"ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
|
||||
" .scroll(ScrollMode.FORWARD_ONLY);\n"
|
||||
"while ( customers.next() ) {\n"
|
||||
" Customer customer = (Customer) customers.get(0);\n"
|
||||
" customer.updateStuff(...);\n"
|
||||
" session.update(customer);\n"
|
||||
"}\n"
|
||||
" \n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
msgstr "このコード例では、クエリが返す <literal>Customer</literal> インスタンスは即座に(セッションから)分離されることに注意してください。 これは、どのような永続コンテキストとも決して関連しません。"
|
||||
"Alternatively, Hibernate provides a command-oriented API that may be used "
|
||||
"for streaming data to and from the database in the form of detached objects. "
|
||||
"A <literal>StatelessSession</literal> has no persistence context associated "
|
||||
"with it and does not provide many of the higher-level life cycle semantics. "
|
||||
"In particular, a stateless session does not implement a first-level cache "
|
||||
"nor interact with any second-level or query cache. It does not implement "
|
||||
"transactional write-behind or automatic dirty checking. Operations performed "
|
||||
"using a stateless session do not ever cascade to associated instances. "
|
||||
"Collections are ignored by a stateless session. Operations performed via a "
|
||||
"stateless session bypass Hibernate's event model and interceptors. Stateless "
|
||||
"sessions are vulnerable to data aliasing effects, due to the lack of a first-"
|
||||
"level cache. A stateless session is a lower-level abstraction, much closer "
|
||||
"to the underlying JDBC."
|
||||
msgstr ""
|
||||
"また別の方法として、Hibernateはコマンド指向のAPIを用意しています。 これは分離"
|
||||
"オブジェクトの形で、 データベースとのデータストリームのやり取りに使うことがで"
|
||||
"きます。 <literal>StatelessSession</literal> は関連する永続コンテキストを持た"
|
||||
"ず、 高レベルのライフサイクルセマンティクスの多くを提供しません。 特にステー"
|
||||
"トレスセッションは、一時キャッシュを実装せず、 またどのような二次キャッシュや"
|
||||
"クエリキャッシュとも相互作用しません。 トランザクショナルなwrite-behindや自動"
|
||||
"ダーティチェックも実装しません。 ステートレスセッションを使って行われる操作"
|
||||
"が、 関連するインスタンスへカスケードされることは決してありません。 コレク"
|
||||
"ションは、ステートレスセッションからは無視されます。 ステートレスセッションを"
|
||||
"通して行われる操作は、 Hibernateのイベントモデルやインターセプタの影響を受け"
|
||||
"ません。 一時キャッシュを持たないため、 ステートレスセッションは別名を持つ"
|
||||
"データに上手く対処できません。 ステートレスセッションは低レベルの抽象化であ"
|
||||
"り、JDBCに非常によく似ています。"
|
||||
|
||||
#: index.docbook:91
|
||||
msgid "Note that in this code example, the <literal>Customer</literal> instances returned by the query are immediately detached. They are never associated with any persistence context."
|
||||
msgstr "<literal>StatelessSession</literal> インターフェイスで定義されている <literal>insert(), update(), delete()</literal> は、 低レベルの直接的なデータベース操作と考えられます。 結果として、SQLの <literal>INSERT, UPDATE, DELETE</literal> がそれぞれ即座に実行されます。 このように、これらは <literal>Session</literal> インターフェイスで定義されている <literal>save(), saveOrUpdate(), delete()</literal> とは非常に異なる意味を持ちます。"
|
||||
#. Tag: programlisting
|
||||
#: batch.xml:89
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[StatelessSession session = sessionFactory.openStatelessSession();\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
" \n"
|
||||
"ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
|
||||
" .scroll(ScrollMode.FORWARD_ONLY);\n"
|
||||
"while ( customers.next() ) {\n"
|
||||
" Customer customer = (Customer) customers.get(0);\n"
|
||||
" customer.updateStuff(...);\n"
|
||||
" session.update(customer);\n"
|
||||
"}\n"
|
||||
" \n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
msgstr ""
|
||||
|
||||
#: index.docbook:97
|
||||
msgid "The <literal>insert(), update()</literal> and <literal>delete()</literal> operations defined by the <literal>StatelessSession</literal> interface are considered to be direct database row-level operations, which result in immediate execution of a SQL <literal>INSERT, UPDATE</literal> or <literal>DELETE</literal> respectively. Thus, they have very different semantics to the <literal>save(), saveOrUpdate()</literal> and <literal>delete()</literal> operations defined by the <literal>Session</literal> interface."
|
||||
#. Tag: para
|
||||
#: batch.xml:91
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Note that in this code example, the <literal>Customer</literal> instances "
|
||||
"returned by the query are immediately detached. They are never associated "
|
||||
"with any persistence context."
|
||||
msgstr ""
|
||||
"このコード例では、クエリが返す <literal>Customer</literal> インスタンスは即座"
|
||||
"に(セッションから)分離されることに注意してください。 これは、どのような永続"
|
||||
"コンテキストとも決して関連しません。"
|
||||
|
||||
#. Tag: para
|
||||
#: batch.xml:97
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"The <literal>insert(), update()</literal> and <literal>delete()</literal> "
|
||||
"operations defined by the <literal>StatelessSession</literal> interface are "
|
||||
"considered to be direct database row-level operations, which result in "
|
||||
"immediate execution of a SQL <literal>INSERT, UPDATE</literal> or "
|
||||
"<literal>DELETE</literal> respectively. Thus, they have very different "
|
||||
"semantics to the <literal>save(), saveOrUpdate()</literal> and "
|
||||
"<literal>delete()</literal> operations defined by the <literal>Session</"
|
||||
"literal> interface."
|
||||
msgstr ""
|
||||
"<literal>StatelessSession</literal> インターフェイスで定義されている "
|
||||
"<literal>insert(), update(), delete()</literal> は、 低レベルの直接的なデータ"
|
||||
"ベース操作と考えられます。 結果として、SQLの <literal>INSERT, UPDATE, "
|
||||
"DELETE</literal> がそれぞれ即座に実行されます。 このように、これらは "
|
||||
"<literal>Session</literal> インターフェイスで定義されている <literal>save(), "
|
||||
"saveOrUpdate(), delete()</literal> とは非常に異なる意味を持ちます。"
|
||||
|
||||
#. Tag: title
|
||||
#: batch.xml:110
|
||||
#, no-c-format
|
||||
msgid "DML-style operations"
|
||||
msgstr "DMLスタイルの操作"
|
||||
|
||||
#: index.docbook:110
|
||||
msgid "DML-style operations"
|
||||
msgstr "すでに議論したように、自動的かつ透過的なオブジェクト/リレーショナルマッピングは、 オブジェクトの状態の管理であると考えられます。 これはメモリ内のオブジェクトの状態を利用できるということです。 そのため(SQLの <literal>データ操作言語</literal> (DML) 文: <literal>INSERT</literal>, <literal>UPDATE</literal>, <literal>DELETE</literal> を使って)データベース内のデータを直接操作しても、 メモリ内の状態には影響を与えません。 しかしHibernateは、バルクSQLスタイルのDML文実行に対応するメソッドを用意しています。 これはHibernateクエリ言語(<xref linkend=\"queryhql\"/>HQL) を通して実行されます。"
|
||||
#. Tag: para
|
||||
#: batch.xml:112
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"As already discussed, automatic and transparent object/relational mapping is "
|
||||
"concerned with the management of object state. This implies that the object "
|
||||
"state is available in memory, hence manipulating (using the SQL "
|
||||
"<literal>Data Manipulation Language</literal> (DML) statements: "
|
||||
"<literal>INSERT</literal>, <literal>UPDATE</literal>, <literal>DELETE</"
|
||||
"literal>) data directly in the database will not affect in-memory state. "
|
||||
"However, Hibernate provides methods for bulk SQL-style DML statement "
|
||||
"execution which are performed through the Hibernate Query Language (<link "
|
||||
"linkend=\"queryhql\">HQL</link>)."
|
||||
msgstr ""
|
||||
"すでに議論したように、自動的かつ透過的なオブジェクト/リレーショナルマッピング"
|
||||
"は、 オブジェクトの状態の管理であると考えられます。 これはメモリ内のオブジェ"
|
||||
"クトの状態を利用できるということです。 そのため(SQLの <literal>データ操作言"
|
||||
"語</literal> (DML) 文: <literal>INSERT</literal>, <literal>UPDATE</"
|
||||
"literal>, <literal>DELETE</literal> を使って)データベース内のデータを直接操"
|
||||
"作しても、 メモリ内の状態には影響を与えません。 しかしHibernateは、バルクSQL"
|
||||
"スタイルのDML文実行に対応するメソッドを用意しています。 これはHibernateクエリ"
|
||||
"言語(<xref linkend=\"queryhql\">HQL</xref>) を通して実行されます。"
|
||||
|
||||
#: index.docbook:112
|
||||
msgid "As already discussed, automatic and transparent object/relational mapping is concerned with the management of object state. This implies that the object state is available in memory, hence manipulating (using the SQL <literal>Data Manipulation Language</literal> (DML) statements: <literal>INSERT</literal>, <literal>UPDATE</literal>, <literal>DELETE</literal>) data directly in the database will not affect in-memory state. However, Hibernate provides methods for bulk SQL-style DML statement execution which are performed through the Hibernate Query Language (<xref linkend=\"queryhql\"/>HQL)."
|
||||
msgstr "<literal>UPDATE</literal> と <literal>DELETE</literal> 文の疑似構文は: <literal>( UPDATE | DELETE ) FROM? エンティティ名 (WHERE 条件節)?</literal> です。 注意すべき点がいくつかあります:"
|
||||
#. Tag: para
|
||||
#: batch.xml:122
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"The pseudo-syntax for <literal>UPDATE</literal> and <literal>DELETE</"
|
||||
"literal> statements is: <literal>( UPDATE | DELETE ) FROM? EntityName (WHERE "
|
||||
"where_conditions)?</literal>. Some points to note:"
|
||||
msgstr ""
|
||||
"<literal>UPDATE</literal> と <literal>DELETE</literal> 文の疑似構文は: "
|
||||
"<literal>( UPDATE | DELETE ) FROM? エンティティ名 (WHERE 条件節)?</literal> "
|
||||
"です。 注意すべき点がいくつかあります:"
|
||||
|
||||
#: index.docbook:122
|
||||
msgid "The pseudo-syntax for <literal>UPDATE</literal> and <literal>DELETE</literal> statements is: <literal>( UPDATE | DELETE ) FROM? EntityName (WHERE where_conditions)?</literal>. Some points to note:"
|
||||
#. Tag: para
|
||||
#: batch.xml:130
|
||||
#, no-c-format
|
||||
msgid "In the from-clause, the FROM keyword is optional"
|
||||
msgstr "from節において、FROMキーワードはオプションです。"
|
||||
|
||||
#: index.docbook:130
|
||||
msgid "In the from-clause, the FROM keyword is optional"
|
||||
msgstr "from節では単一のエンティティ名だけが可能で、 任意で別名を付けることができます。 エンティティ名に別名が与えられると、どのようなプロパティ参照も、 その別名を使って修飾しなければなりません。 もしエンティティ名に別名が与えられなければ、 どのようなプロパティ参照も修飾してはなりません。"
|
||||
#. Tag: para
|
||||
#: batch.xml:135
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"There can only be a single entity named in the from-clause; it can "
|
||||
"optionally be aliased. If the entity name is aliased, then any property "
|
||||
"references must be qualified using that alias; if the entity name is not "
|
||||
"aliased, then it is illegal for any property references to be qualified."
|
||||
msgstr ""
|
||||
"from節では単一のエンティティ名だけが可能で、 任意で別名を付けることができま"
|
||||
"す。 エンティティ名に別名が与えられると、どのようなプロパティ参照も、 その別"
|
||||
"名を使って修飾しなければなりません。 もしエンティティ名に別名が与えられなけれ"
|
||||
"ば、 どのようなプロパティ参照も修飾してはなりません。"
|
||||
|
||||
#: index.docbook:135
|
||||
msgid "There can only be a single entity named in the from-clause; it can optionally be aliased. If the entity name is aliased, then any property references must be qualified using that alias; if the entity name is not aliased, then it is illegal for any property references to be qualified."
|
||||
msgstr "(暗黙的であれ明示的であれ)<xref linkend=\"queryhql-joins-forms\"/>結合 をバルクHQLクエリ内で指定することはできません。 サブクエリはwhere節で使うことができます サブクエリそのものは、結合を含められます。"
|
||||
#. Tag: para
|
||||
#: batch.xml:143
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"No <link linkend=\"queryhql-joins-forms\">joins</link> (either implicit or "
|
||||
"explicit) can be specified in a bulk HQL query. Sub-queries may be used in "
|
||||
"the where-clause; the subqueries, themselves, may contain joins."
|
||||
msgstr ""
|
||||
"(暗黙的であれ明示的であれ)<xref linkend=\"queryhql-joins-forms\">結合</"
|
||||
"xref> をバルクHQLクエリ内で指定することはできません。 サブクエリはwhere節で使"
|
||||
"うことができます サブクエリそのものは、結合を含められます。"
|
||||
|
||||
#: index.docbook:143
|
||||
msgid "No <xref linkend=\"queryhql-joins-forms\"/>joins (either implicit or explicit) can be specified in a bulk HQL query. Sub-queries may be used in the where-clause; the subqueries, themselves, may contain joins."
|
||||
#. Tag: para
|
||||
#: batch.xml:150
|
||||
#, no-c-format
|
||||
msgid "The where-clause is also optional."
|
||||
msgstr "where節はオプションです。"
|
||||
|
||||
#: index.docbook:150
|
||||
msgid "The where-clause is also optional."
|
||||
msgstr "例として、HQLの <literal>UPDATE</literal> を実行するには、 <literal>Query.executeUpdate()</literal> メソッドを使ってください。 (このメソッドはおなじみのJDBC <literal>PreparedStatement.executeUpdate()</literal> から名付けられました): d"
|
||||
|
||||
#: index.docbook:156
|
||||
msgid "As an example, to execute an HQL <literal>UPDATE</literal>, use the <literal>Query.executeUpdate()</literal> method (the method is named for those familiar with JDBC's <literal>PreparedStatement.executeUpdate()</literal>):"
|
||||
msgstr ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();
\n"
|
||||
"Transaction tx = session.beginTransaction();
\n"
|
||||
"
\n"
|
||||
"String hqlUpdate = \"update Customer c set c.name = :newName where c.name = :oldName\";
\n"
|
||||
"// or String hqlUpdate = \"update Customer set name = :newName where name = :oldName\";
\n"
|
||||
"int updatedEntities = s.createQuery( hqlUpdate )
\n"
|
||||
" .setString( \"newName\", newName )
\n"
|
||||
" .setString( \"oldName\", oldName )
\n"
|
||||
" .executeUpdate();
\n"
|
||||
"tx.commit();
\n"
|
||||
"session.close();]]>"
|
||||
|
||||
#: index.docbook:162
|
||||
#. Tag: para
|
||||
#: batch.xml:156
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
"\n"
|
||||
"String hqlUpdate = \"update Customer c set c.name = :newName where c.name = :oldName\";\n"
|
||||
"// or String hqlUpdate = \"update Customer set name = :newName where name = :oldName\";\n"
|
||||
"int updatedEntities = s.createQuery( hqlUpdate )\n"
|
||||
" .setString( \"newName\", newName )\n"
|
||||
" .setString( \"oldName\", oldName )\n"
|
||||
" .executeUpdate();\n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
msgstr "HQLの <literal>UPDATE</literal> 文は、デフォルトでは、作用するエンティティの <xref linkend=\"mapping-declaration-version\"/>version や <xref linkend=\"mapping-declaration-timestamp\"/>timestamp プロパティの値には影響しません。 これはEJB3の仕様にも受け継がれています。 しかし <literal>versioned update</literal> を使って、 <literal>version</literal> や <literal>timestamp</literal> プロパティの値を強制的にリセットさせることができます。 これは <literal>UPDATE</literal> キーワードの後に <literal>VERSIONED</literal> キーワードを追加することで行えます。"
|
||||
|
||||
#: index.docbook:164
|
||||
msgid "HQL <literal>UPDATE</literal> statements, by default do not effect the <xref linkend=\"mapping-declaration-version\"/>version or the <xref linkend=\"mapping-declaration-timestamp\"/>timestamp property values for the affected entities; this is in keeping with the EJB3 specification. However, you can force Hibernate to properly reset the <literal>version</literal> or <literal>timestamp</literal> property values through the use of a <literal>versioned update</literal>. This is achieved by adding the <literal>VERSIONED</literal> keyword after the <literal>UPDATE</literal> keyword."
|
||||
"As an example, to execute an HQL <literal>UPDATE</literal>, use the "
|
||||
"<literal>Query.executeUpdate()</literal> method (the method is named for "
|
||||
"those familiar with JDBC's <literal>PreparedStatement.executeUpdate()</"
|
||||
"literal>):"
|
||||
msgstr ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();
\n"
|
||||
"Transaction tx = session.beginTransaction();
\n"
|
||||
"String hqlVersionedUpdate = \"update versioned Customer set name = :newName where name = :oldName\";
\n"
|
||||
"int updatedEntities = s.createQuery( hqlUpdate )
\n"
|
||||
" .setString( \"newName\", newName )
\n"
|
||||
" .setString( \"oldName\", oldName )
\n"
|
||||
" .executeUpdate();
\n"
|
||||
"tx.commit();
\n"
|
||||
"session.close();]]>"
|
||||
"例として、HQLの <literal>UPDATE</literal> を実行するには、 <literal>Query."
|
||||
"executeUpdate()</literal> メソッドを使ってください。 (このメソッドはおなじみ"
|
||||
"のJDBC <literal>PreparedStatement.executeUpdate()</literal> から名付けられま"
|
||||
"した): d"
|
||||
|
||||
#: index.docbook:174
|
||||
#. Tag: programlisting
|
||||
#: batch.xml:162
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
"String hqlVersionedUpdate = \"update versioned Customer set name = :newName where name = :oldName\";\n"
|
||||
"int updatedEntities = s.createQuery( hqlUpdate )\n"
|
||||
" .setString( \"newName\", newName )\n"
|
||||
" .setString( \"oldName\", oldName )\n"
|
||||
" .executeUpdate();\n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
msgstr "カスタムバージョン型(<literal>org.hibernate.usertype.UserVersionType</literal>) は <literal>update versioned</literal> 文と一緒に使えないことに注意してください。"
|
||||
|
||||
#: index.docbook:176
|
||||
msgid "Note that custom version types (<literal>org.hibernate.usertype.UserVersionType</literal>) are not allowed in conjunction with a <literal>update versioned</literal> statement."
|
||||
msgstr "HQLの <literal>DELETE</literal> を実行するには、 同じ <literal>Query.executeUpdate()</literal> メソッドを使ってください:"
|
||||
|
||||
#: index.docbook:181
|
||||
msgid "To execute an HQL <literal>DELETE</literal>, use the same <literal>Query.executeUpdate()</literal> method:"
|
||||
"<![CDATA[Session session = sessionFactory.openSession();\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
"\n"
|
||||
"String hqlUpdate = \"update Customer c set c.name = :newName where c.name = :"
|
||||
"oldName\";\n"
|
||||
"// or String hqlUpdate = \"update Customer set name = :newName where name = :"
|
||||
"oldName\";\n"
|
||||
"int updatedEntities = s.createQuery( hqlUpdate )\n"
|
||||
" .setString( \"newName\", newName )\n"
|
||||
" .setString( \"oldName\", oldName )\n"
|
||||
" .executeUpdate();\n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
msgstr ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();
\n"
|
||||
"Transaction tx = session.beginTransaction();
\n"
|
||||
"
\n"
|
||||
"String hqlDelete = \"delete Customer c where c.name = :oldName\";
\n"
|
||||
"// or String hqlDelete = \"delete Customer where name = :oldName\";
\n"
|
||||
"int deletedEntities = s.createQuery( hqlDelete )
\n"
|
||||
" .setString( \"oldName\", oldName )
\n"
|
||||
" .executeUpdate();
\n"
|
||||
"tx.commit();
\n"
|
||||
"session.close();]]>"
|
||||
|
||||
#: index.docbook:186
|
||||
#. Tag: para
|
||||
#: batch.xml:164
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
"\n"
|
||||
"String hqlDelete = \"delete Customer c where c.name = :oldName\";\n"
|
||||
"// or String hqlDelete = \"delete Customer where name = :oldName\";\n"
|
||||
"int deletedEntities = s.createQuery( hqlDelete )\n"
|
||||
" .setString( \"oldName\", oldName )\n"
|
||||
" .executeUpdate();\n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
msgstr "<literal>Query.executeUpdate()</literal> メソッドが返す <literal>int</literal> の値は、この操作が影響を及ぼしたエンティティの数です。 これが影響するデータベース内の行数と、相互に関係するかどうかを考えてみてください。 HQLバルク操作は、結果として、実際のSQL文が複数実行されることになります。 例えばjoined-subclassです。 返される数は、その文によって影響された実際のエンティティの数を示します。 joined-subclassの例に戻ると、サブクラスの一つに対する削除は、 そのサブクラスがマッピングされたテーブルだけではなく、 「ルート」テーブルと継承階層をさらに下ったjoined-subclassのテーブルの削除になります。"
|
||||
"HQL <literal>UPDATE</literal> statements, by default do not effect the <link "
|
||||
"linkend=\"mapping-declaration-version\">version</link> or the <link linkend="
|
||||
"\"mapping-declaration-timestamp\">timestamp</link> property values for the "
|
||||
"affected entities; this is in keeping with the EJB3 specification. However, "
|
||||
"you can force Hibernate to properly reset the <literal>version</literal> or "
|
||||
"<literal>timestamp</literal> property values through the use of a "
|
||||
"<literal>versioned update</literal>. This is achieved by adding the "
|
||||
"<literal>VERSIONED</literal> keyword after the <literal>UPDATE</literal> "
|
||||
"keyword."
|
||||
msgstr ""
|
||||
"HQLの <literal>UPDATE</literal> 文は、デフォルトでは、作用するエンティティの "
|
||||
"<xref linkend=\"mapping-declaration-version\">version</xref> や <xref "
|
||||
"linkend=\"mapping-declaration-timestamp\">timestamp</xref> プロパティの値には"
|
||||
"影響しません。 これはEJB3の仕様にも受け継がれています。 しかし "
|
||||
"<literal>versioned update</literal> を使って、 <literal>version</literal> や "
|
||||
"<literal>timestamp</literal> プロパティの値を強制的にリセットさせることができ"
|
||||
"ます。 これは <literal>UPDATE</literal> キーワードの後に <literal>VERSIONED</"
|
||||
"literal> キーワードを追加することで行えます。"
|
||||
|
||||
#: index.docbook:188
|
||||
msgid "The <literal>int</literal> value returned by the <literal>Query.executeUpdate()</literal> method indicate the number of entities effected by the operation. Consider this may or may not correlate to the number of rows effected in the database. An HQL bulk operation might result in multiple actual SQL statements being executed, for joined-subclass, for example. The returned number indicates the number of actual entities affected by the statement. Going back to the example of joined-subclass, a delete against one of the subclasses may actually result in deletes against not just the table to which that subclass is mapped, but also the \"root\" table and potentially joined-subclass tables further down the inheritence hierarchy."
|
||||
msgstr "<literal>INSERT</literal> 文の疑似構文は: <literal>INSERT INTO エンティティ名 プロパティリスト select文</literal> です。 注意すべき点がいくつかあります:"
|
||||
#. Tag: programlisting
|
||||
#: batch.xml:174
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
"String hqlVersionedUpdate = \"update versioned Customer set name = :newName "
|
||||
"where name = :oldName\";\n"
|
||||
"int updatedEntities = s.createQuery( hqlUpdate )\n"
|
||||
" .setString( \"newName\", newName )\n"
|
||||
" .setString( \"oldName\", oldName )\n"
|
||||
" .executeUpdate();\n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
msgstr ""
|
||||
|
||||
#: index.docbook:199
|
||||
msgid "The pseudo-syntax for <literal>INSERT</literal> statements is: <literal>INSERT INTO EntityName properties_list select_statement</literal>. Some points to note:"
|
||||
msgstr "INSERT INTO ... SELECT ... の形式だけがサポートされています。 INSERT INTO ... VALUES ... の形式はサポートされていません。"
|
||||
#. Tag: para
|
||||
#: batch.xml:176
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Note that custom version types (<literal>org.hibernate.usertype."
|
||||
"UserVersionType</literal>) are not allowed in conjunction with a "
|
||||
"<literal>update versioned</literal> statement."
|
||||
msgstr ""
|
||||
"カスタムバージョン型(<literal>org.hibernate.usertype.UserVersionType</"
|
||||
"literal>) は <literal>update versioned</literal> 文と一緒に使えないことに注"
|
||||
"意してください。"
|
||||
|
||||
#: index.docbook:207
|
||||
msgid "Only the INSERT INTO ... SELECT ... form is supported; not the INSERT INTO ... VALUES ... form."
|
||||
msgstr "プロパティリストは、SQLの <literal>INSERT</literal> 文における <literal>カラムの仕様</literal> に類似しています。 継承のマッピングに含まれるエンティティに対して、 クラスレベルで直接定義されたプロパティだけが、プロパティリストに使えます。 スーパークラスのプロパティは認められず、サブクラスのプロパティは効果がありません。 言い換えると <literal>INSERT</literal> 文は、本質的にポリモーフィックではありません。"
|
||||
#. Tag: para
|
||||
#: batch.xml:181
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"To execute an HQL <literal>DELETE</literal>, use the same <literal>Query."
|
||||
"executeUpdate()</literal> method:"
|
||||
msgstr ""
|
||||
"HQLの <literal>DELETE</literal> を実行するには、 同じ <literal>Query."
|
||||
"executeUpdate()</literal> メソッドを使ってください:"
|
||||
|
||||
#: index.docbook:210
|
||||
msgid "The properties_list is analogous to the <literal>column speficiation</literal> in the SQL <literal>INSERT</literal> statement. For entities involved in mapped inheritence, only properties directly defined on that given class-level can be used in the properties_list. Superclass properties are not allowed; and subclass properties do not make sense. In other words, <literal>INSERT</literal> statements are inherently non-polymorphic."
|
||||
msgstr "select文の返り値の型がinsert文が期待する型とマッチしていれば、 そのselect文は妥当なHQL selectクエリとなりえます。 現在このチェックをデータベースへ任せるのではなく、クエリのコンパイル時にチェックします。 このことは、<emphasis>equal</emphasis>とは違い、 Hibernateの <literal>Type</literal> 間の <emphasis>equivalent</emphasis> に関する 問題を引き起こすことに注意してください。 これは <literal>org.hibernate.type.DataType</literal> として定義されたプロパティと、 <literal>org.hibernate.type.TimestampType</literal> として定義されたプロパティの間のミスマッチの問題を引き起こします。 データベースがそれらを区別できなくても、変換することができても、この問題は発生します。"
|
||||
#. Tag: programlisting
|
||||
#: batch.xml:186
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
"\n"
|
||||
"String hqlDelete = \"delete Customer c where c.name = :oldName\";\n"
|
||||
"// or String hqlDelete = \"delete Customer where name = :oldName\";\n"
|
||||
"int deletedEntities = s.createQuery( hqlDelete )\n"
|
||||
" .setString( \"oldName\", oldName )\n"
|
||||
" .executeUpdate();\n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
msgstr ""
|
||||
|
||||
#: index.docbook:220
|
||||
msgid "select_statement can be any valid HQL select query, with the caveat that the return types must match the types expected by the insert. Currently, this is checked during query compilation rather than allowing the check to relegate to the database. Note however that this might cause problems between Hibernate <literal>Type</literal>s which are <emphasis>equivalent</emphasis> as opposed to <emphasis>equal</emphasis>. This might cause issues with mismatches between a property defined as a <literal>org.hibernate.type.DateType</literal> and a property defined as a <literal>org.hibernate.type.TimestampType</literal>, even though the database might not make a distinction or might be able to handle the conversion."
|
||||
msgstr "idプロパティに対して、insert文には二つの選択肢があります。 プロパティリストで明示的にidプロパティを指定するか (この場合、対応するselect式から値が取られます)、 プロパティリストから除外するか (この場合、生成される値が使われます)のいずれかです。 後者の選択肢は、データベース内を操作するidジェネレータを使うときのみ、利用可能です。 この選択肢を採る場合、「インメモリ」型のジェネレータを使うと、構文解析時に例外が発生します。 この議論では、インデータベース型ジェネレータは <literal>org.hibernate.id.SequenceGenerator</literal> (とそのサブクラス)と、<literal>org.hibernate.id.PostInsertIdentifierGenerator</literal> の実装であると考えています。 ここで最も注意すべき例外は、<literal>org.hibernate.id.TableHiLoGenerator</literal> です。 値を取得する選択可能な方法がないため、このジェネレータを使うことはできません。"
|
||||
#. Tag: para
|
||||
#: batch.xml:188
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"The <literal>int</literal> value returned by the <literal>Query.executeUpdate"
|
||||
"()</literal> method indicate the number of entities effected by the "
|
||||
"operation. Consider this may or may not correlate to the number of rows "
|
||||
"effected in the database. An HQL bulk operation might result in multiple "
|
||||
"actual SQL statements being executed, for joined-subclass, for example. The "
|
||||
"returned number indicates the number of actual entities affected by the "
|
||||
"statement. Going back to the example of joined-subclass, a delete against "
|
||||
"one of the subclasses may actually result in deletes against not just the "
|
||||
"table to which that subclass is mapped, but also the \"root\" table and "
|
||||
"potentially joined-subclass tables further down the inheritence hierarchy."
|
||||
msgstr ""
|
||||
"<literal>Query.executeUpdate()</literal> メソッドが返す <literal>int</"
|
||||
"literal> の値は、この操作が影響を及ぼしたエンティティの数です。 これが影響す"
|
||||
"るデータベース内の行数と、相互に関係するかどうかを考えてみてください。 HQLバ"
|
||||
"ルク操作は、結果として、実際のSQL文が複数実行されることになります。 例えば"
|
||||
"joined-subclassです。 返される数は、その文によって影響された実際のエンティ"
|
||||
"ティの数を示します。 joined-subclassの例に戻ると、サブクラスの一つに対する削"
|
||||
"除は、 そのサブクラスがマッピングされたテーブルだけではなく、 「ルート」テー"
|
||||
"ブルと継承階層をさらに下ったjoined-subclassのテーブルの削除になります。"
|
||||
|
||||
#: index.docbook:232
|
||||
msgid "For the id property, the insert statement gives you two options. You can either explicitly specify the id property in the properties_list (in which case its value is taken from the corresponding select expression) or omit it from the properties_list (in which case a generated value is used). This later option is only available when using id generators that operate in the database; attempting to use this option with any \"in memory\" type generators will cause an exception during parsing. Note that for the purposes of this discussion, in-database generators are considered to be <literal>org.hibernate.id.SequenceGenerator</literal> (and its subclasses) and any implementors of <literal>org.hibernate.id.PostInsertIdentifierGenerator</literal>. The most notable exception here is <literal>org.hibernate.id.TableHiLoGenerator</literal>, which cannot be used because it does not expose a selectable way to get its values."
|
||||
msgstr "<literal>version</literal> や <literal>timestamp</literal> としてマッピングされるプロパティに対して、 insert文には二つの選択肢があります。 プロパティリストで明示的にプロパティを指定するか (この場合、対応するselect式から値が取られます)、 プロパティリストから除外するか (この場合、<literal>org.hibernate.type.VersionType</literal> で定義された <literal>シード値</literal> が使われます)のいずれかです。"
|
||||
#. Tag: para
|
||||
#: batch.xml:199
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"The pseudo-syntax for <literal>INSERT</literal> statements is: "
|
||||
"<literal>INSERT INTO EntityName properties_list select_statement</literal>. "
|
||||
"Some points to note:"
|
||||
msgstr ""
|
||||
"<literal>INSERT</literal> 文の疑似構文は: <literal>INSERT INTO エンティティ"
|
||||
"名 プロパティリスト select文</literal> です。 注意すべき点がいくつかありま"
|
||||
"す:"
|
||||
|
||||
#: index.docbook:247
|
||||
msgid "For properties mapped as either <literal>version</literal> or <literal>timestamp</literal>, the insert statement gives you two options. You can either specify the property in the properties_list (in which case its value is taken from the corresponding select expressions) or omit it from the properties_list (in which case the <literal>seed value</literal> defined by the <literal>org.hibernate.type.VersionType</literal> is used)."
|
||||
#. Tag: para
|
||||
#: batch.xml:207
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Only the INSERT INTO ... SELECT ... form is supported; not the INSERT "
|
||||
"INTO ... VALUES ... form."
|
||||
msgstr ""
|
||||
"INSERT INTO ... SELECT ... の形式だけがサポートされています。 INSERT "
|
||||
"INTO ... VALUES ... の形式はサポートされていません。"
|
||||
|
||||
#. Tag: para
|
||||
#: batch.xml:210
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"The properties_list is analogous to the <literal>column speficiation</"
|
||||
"literal> in the SQL <literal>INSERT</literal> statement. For entities "
|
||||
"involved in mapped inheritence, only properties directly defined on that "
|
||||
"given class-level can be used in the properties_list. Superclass properties "
|
||||
"are not allowed; and subclass properties do not make sense. In other words, "
|
||||
"<literal>INSERT</literal> statements are inherently non-polymorphic."
|
||||
msgstr ""
|
||||
"プロパティリストは、SQLの <literal>INSERT</literal> 文における <literal>カラ"
|
||||
"ムの仕様</literal> に類似しています。 継承のマッピングに含まれるエンティティ"
|
||||
"に対して、 クラスレベルで直接定義されたプロパティだけが、プロパティリストに使"
|
||||
"えます。 スーパークラスのプロパティは認められず、サブクラスのプロパティは効果"
|
||||
"がありません。 言い換えると <literal>INSERT</literal> 文は、本質的にポリモー"
|
||||
"フィックではありません。"
|
||||
|
||||
#. Tag: para
|
||||
#: batch.xml:220
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"select_statement can be any valid HQL select query, with the caveat that the "
|
||||
"return types must match the types expected by the insert. Currently, this is "
|
||||
"checked during query compilation rather than allowing the check to relegate "
|
||||
"to the database. Note however that this might cause problems between "
|
||||
"Hibernate <literal>Type</literal>s which are <emphasis>equivalent</emphasis> "
|
||||
"as opposed to <emphasis>equal</emphasis>. This might cause issues with "
|
||||
"mismatches between a property defined as a <literal>org.hibernate.type."
|
||||
"DateType</literal> and a property defined as a <literal>org.hibernate.type."
|
||||
"TimestampType</literal>, even though the database might not make a "
|
||||
"distinction or might be able to handle the conversion."
|
||||
msgstr ""
|
||||
"select文の返り値の型が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> として定"
|
||||
"義されたプロパティの間のミスマッチの問題を引き起こします。 データベースがそれ"
|
||||
"らを区別できなくても、変換することができても、この問題は発生します。"
|
||||
|
||||
#. Tag: para
|
||||
#: batch.xml:232
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"For the id property, the insert statement gives you two options. You can "
|
||||
"either explicitly specify the id property in the properties_list (in which "
|
||||
"case its value is taken from the corresponding select expression) or omit it "
|
||||
"from the properties_list (in which case a generated value is used). This "
|
||||
"later option is only available when using id generators that operate in the "
|
||||
"database; attempting to use this option with any \"in memory\" type "
|
||||
"generators will cause an exception during parsing. Note that for the "
|
||||
"purposes of this discussion, in-database generators are considered to be "
|
||||
"<literal>org.hibernate.id.SequenceGenerator</literal> (and its subclasses) "
|
||||
"and any implementors of <literal>org.hibernate.id."
|
||||
"PostInsertIdentifierGenerator</literal>. The most notable exception here is "
|
||||
"<literal>org.hibernate.id.TableHiLoGenerator</literal>, which cannot be used "
|
||||
"because it does not expose a selectable way to get its values."
|
||||
msgstr ""
|
||||
"idプロパティに対して、insert文には二つの選択肢があります。 プロパティリストで"
|
||||
"明示的にidプロパティを指定するか (この場合、対応するselect式から値が取られま"
|
||||
"す)、 プロパティリストから除外するか (この場合、生成される値が使われます)"
|
||||
"のいずれかです。 後者の選択肢は、データベース内を操作するidジェネレータを使う"
|
||||
"ときのみ、利用可能です。 この選択肢を採る場合、「インメモリ」型のジェネレータ"
|
||||
"を使うと、構文解析時に例外が発生します。 この議論では、インデータベース型ジェ"
|
||||
"ネレータは <literal>org.hibernate.id.SequenceGenerator</literal> (とそのサブ"
|
||||
"クラス)と、<literal>org.hibernate.id.PostInsertIdentifierGenerator</"
|
||||
"literal> の実装であると考えています。 ここで最も注意すべき例外は、"
|
||||
"<literal>org.hibernate.id.TableHiLoGenerator</literal> です。 値を取得する選"
|
||||
"択可能な方法がないため、このジェネレータを使うことはできません。"
|
||||
|
||||
#. Tag: para
|
||||
#: batch.xml:247
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"For properties mapped as either <literal>version</literal> or "
|
||||
"<literal>timestamp</literal>, the insert statement gives you two options. "
|
||||
"You can either specify the property in the properties_list (in which case "
|
||||
"its value is taken from the corresponding select expressions) or omit it "
|
||||
"from the properties_list (in which case the <literal>seed value</literal> "
|
||||
"defined by the <literal>org.hibernate.type.VersionType</literal> is used)."
|
||||
msgstr ""
|
||||
"<literal>version</literal> や <literal>timestamp</literal> としてマッピングさ"
|
||||
"れるプロパティに対して、 insert文には二つの選択肢があります。 プロパティリス"
|
||||
"トで明示的にプロパティを指定するか (この場合、対応するselect式から値が取られ"
|
||||
"ます)、 プロパティリストから除外するか (この場合、<literal>org.hibernate."
|
||||
"type.VersionType</literal> で定義された <literal>シード値</literal> が使われ"
|
||||
"ます)のいずれかです。"
|
||||
|
||||
#. Tag: para
|
||||
#: batch.xml:257
|
||||
#, no-c-format
|
||||
msgid "An example HQL <literal>INSERT</literal> statement execution:"
|
||||
msgstr "HQLの <literal>INSERT</literal> 文の実行例です:"
|
||||
|
||||
#: index.docbook:257
|
||||
msgid "An example HQL <literal>INSERT</literal> statement execution:"
|
||||
msgstr ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();
\n"
|
||||
"Transaction tx = session.beginTransaction();
\n"
|
||||
"
\n"
|
||||
"String hqlInsert = \"insert into DelinquentAccount (id, name) select c.id, c.name from Customer c where ...\";
\n"
|
||||
"int createdEntities = s.createQuery( hqlInsert )
\n"
|
||||
" .executeUpdate();
\n"
|
||||
"tx.commit();
\n"
|
||||
"session.close();]]>"
|
||||
|
||||
#: index.docbook:261
|
||||
#. Tag: programlisting
|
||||
#: batch.xml:261
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Session session = sessionFactory.openSession();\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
"\n"
|
||||
"String hqlInsert = \"insert into DelinquentAccount (id, name) select c.id, c.name from Customer c where ...\";\n"
|
||||
"int createdEntities = s.createQuery( hqlInsert )\n"
|
||||
" .executeUpdate();\n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
"<![CDATA[Session session = sessionFactory.openSession();\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
"\n"
|
||||
"String hqlInsert = \"insert into DelinquentAccount (id, name) select c.id, c."
|
||||
"name from Customer c where ...\";\n"
|
||||
"int createdEntities = s.createQuery( hqlInsert )\n"
|
||||
" .executeUpdate();\n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
msgstr ""
|
||||
|
||||
msgid "ROLES_OF_TRANSLATORS"
|
||||
msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
|
||||
|
||||
msgid "CREDIT_FOR_TRANSLATORS"
|
||||
msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
|
||||
|
||||
|
|
|
@ -1,168 +1,447 @@
|
|||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2007-10-25 07:47+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
#: index.docbook:5
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#. Tag: title
|
||||
#: best_practices.xml:5
|
||||
#, no-c-format
|
||||
msgid "Best Practices"
|
||||
msgstr "ベストプラクティス"
|
||||
|
||||
#: index.docbook:9
|
||||
msgid "Write fine-grained classes and map them using <literal><component></literal>."
|
||||
msgstr "クラスは細かい粒度で書き <literal><component></literal> でマッピングしましょう。"
|
||||
#. Tag: term
|
||||
#: best_practices.xml:9
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Write fine-grained classes and map them using <literal><component></"
|
||||
"literal>."
|
||||
msgstr ""
|
||||
"クラスは細かい粒度で書き <literal><component></literal> でマッピングし"
|
||||
"ましょう。"
|
||||
|
||||
#: index.docbook:11
|
||||
msgid "Use an <literal>Address</literal> class to encapsulate <literal>street</literal>, <literal>suburb</literal>, <literal>state</literal>, <literal>postcode</literal>. This encourages code reuse and simplifies refactoring."
|
||||
msgstr "<literal>street</literal>(通り), <literal>suburb</literal> (都市), <literal>state</literal>(州), <literal>postcode</literal> (郵便番号)をカプセル化する <literal>Address</literal>(住所)クラスを使いましょう。 そうすればコードが再利用しやすくなり、リファクタリングも簡単になります。"
|
||||
#. Tag: para
|
||||
#: best_practices.xml:11
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Use an <literal>Address</literal> class to encapsulate <literal>street</"
|
||||
"literal>, <literal>suburb</literal>, <literal>state</literal>, "
|
||||
"<literal>postcode</literal>. This encourages code reuse and simplifies "
|
||||
"refactoring."
|
||||
msgstr ""
|
||||
"<literal>street</literal>(通り), <literal>suburb</literal> (都市), "
|
||||
"<literal>state</literal>(州), <literal>postcode</literal> (郵便番号)をカ"
|
||||
"プセル化する <literal>Address</literal>(住所)クラスを使いましょう。 そうす"
|
||||
"ればコードが再利用しやすくなり、リファクタリングも簡単になります。"
|
||||
|
||||
#: index.docbook:19
|
||||
#. Tag: term
|
||||
#: best_practices.xml:19
|
||||
#, no-c-format
|
||||
msgid "Declare identifier properties on persistent classes."
|
||||
msgstr "永続クラスには識別子プロパティを定義しましょう。"
|
||||
|
||||
#: index.docbook:21
|
||||
msgid "Hibernate makes identifier properties optional. There are all sorts of reasons why you should use them. We recommend that identifiers be 'synthetic' (generated, with no business meaning)."
|
||||
msgstr "Hibernateでは識別子プロパティはオプションですが、 使用すべき理由がたくさんあります。 識別子は「人工的」(生成された、業務的な意味を持たない) なものにすることをおすすめします。"
|
||||
#. Tag: para
|
||||
#: best_practices.xml:21
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Hibernate makes identifier properties optional. There are all sorts of "
|
||||
"reasons why you should use them. We recommend that identifiers be "
|
||||
"'synthetic' (generated, with no business meaning)."
|
||||
msgstr ""
|
||||
"Hibernateでは識別子プロパティはオプションですが、 使用すべき理由がたくさんあ"
|
||||
"ります。 識別子は「人工的」(生成された、業務的な意味を持たない) なものにす"
|
||||
"ることをおすすめします。"
|
||||
|
||||
#: index.docbook:29
|
||||
#. Tag: term
|
||||
#: best_practices.xml:29
|
||||
#, no-c-format
|
||||
msgid "Identify natural keys."
|
||||
msgstr "自然キーを見つけましょう。"
|
||||
|
||||
#: index.docbook:31
|
||||
msgid "Identify natural keys for all entities, and map them using <literal><natural-id></literal>. Implement <literal>equals()</literal> and <literal>hashCode()</literal> to compare the properties that make up the natural key."
|
||||
msgstr "すべてのエンティティに対して自然キーを見つけて、 <literal><natural-id></literal> でマッピングしましょう。 自然キーを構成するプロパティを比較するために、 <literal>equals()</literal> と <literal>hashCode()</literal> を実装しましょう。"
|
||||
#. Tag: para
|
||||
#: best_practices.xml:31
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Identify natural keys for all entities, and map them using <literal><"
|
||||
"natural-id></literal>. Implement <literal>equals()</literal> and "
|
||||
"<literal>hashCode()</literal> to compare the properties that make up the "
|
||||
"natural key."
|
||||
msgstr ""
|
||||
"すべてのエンティティに対して自然キーを見つけて、 <literal><natural-id>"
|
||||
"</literal> でマッピングしましょう。 自然キーを構成するプロパティを比較するた"
|
||||
"めに、 <literal>equals()</literal> と <literal>hashCode()</literal> を実装し"
|
||||
"ましょう。"
|
||||
|
||||
#: index.docbook:39
|
||||
#. Tag: term
|
||||
#: best_practices.xml:39
|
||||
#, no-c-format
|
||||
msgid "Place each class mapping in its own file."
|
||||
msgstr "クラスのマッピングはそれぞれのクラス専用のファイルに書きましょう。"
|
||||
|
||||
#: index.docbook:41
|
||||
msgid "Don't use a single monolithic mapping document. Map <literal>com.eg.Foo</literal> in the file <literal>com/eg/Foo.hbm.xml</literal>. This makes particularly good sense in a team environment."
|
||||
msgstr "単一の巨大なマッピングドキュメントを使用しないでください。 <literal>com.eg.Foo</literal> クラスなら <literal>com/eg/Foo.hbm.xml</literal> ファイルにマッピングしましょう。 このことは、特にチームでの開発に意味があります。"
|
||||
#. Tag: para
|
||||
#: best_practices.xml:41
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Don't use a single monolithic mapping document. Map <literal>com.eg.Foo</"
|
||||
"literal> in the file <literal>com/eg/Foo.hbm.xml</literal>. This makes "
|
||||
"particularly good sense in a team environment."
|
||||
msgstr ""
|
||||
"単一の巨大なマッピングドキュメントを使用しないでください。 <literal>com.eg."
|
||||
"Foo</literal> クラスなら <literal>com/eg/Foo.hbm.xml</literal> ファイルにマッ"
|
||||
"ピングしましょう。 このことは、特にチームでの開発に意味があります。"
|
||||
|
||||
#: index.docbook:49
|
||||
#. Tag: term
|
||||
#: best_practices.xml:49
|
||||
#, no-c-format
|
||||
msgid "Load mappings as resources."
|
||||
msgstr "リソースとしてマッピングをロードしましょう。"
|
||||
|
||||
#: index.docbook:51
|
||||
#. Tag: para
|
||||
#: best_practices.xml:51
|
||||
#, no-c-format
|
||||
msgid "Deploy the mappings along with the classes they map."
|
||||
msgstr "マッピングを、それらがマッピングするするクラスと一緒に配置しましょう。"
|
||||
|
||||
#: index.docbook:57
|
||||
#. Tag: term
|
||||
#: best_practices.xml:57
|
||||
#, no-c-format
|
||||
msgid "Consider externalising query strings."
|
||||
msgstr "クエリ文字列を外部に置くことを考えましょう"
|
||||
|
||||
#: index.docbook:59
|
||||
msgid "This is a good practice if your queries call non-ANSI-standard SQL functions. Externalising the query strings to mapping files will make the application more portable."
|
||||
msgstr "クエリがANSI標準でないSQL関数を呼んでいるなら、これはよいプラクティスです。 クエリ文字列をマッピングファイルへ外出しすればアプリケーションがポータブルになります。"
|
||||
#. Tag: para
|
||||
#: best_practices.xml:59
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"This is a good practice if your queries call non-ANSI-standard SQL "
|
||||
"functions. Externalising the query strings to mapping files will make the "
|
||||
"application more portable."
|
||||
msgstr ""
|
||||
"クエリがANSI標準でないSQL関数を呼んでいるなら、これはよいプラクティスです。 "
|
||||
"クエリ文字列をマッピングファイルへ外出しすればアプリケーションがポータブルに"
|
||||
"なります。"
|
||||
|
||||
#: index.docbook:67
|
||||
#. Tag: term
|
||||
#: best_practices.xml:67
|
||||
#, no-c-format
|
||||
msgid "Use bind variables."
|
||||
msgstr "バインド変数を使いましょう。"
|
||||
|
||||
#: index.docbook:69
|
||||
msgid "As in JDBC, always replace non-constant values by \"?\". Never use string manipulation to bind a non-constant value in a query! Even better, consider using named parameters in queries."
|
||||
msgstr "JDBCの場合と同じように、定数でない値は必ず\"?\"で置き換えましょう。 定数でない値をバインドするために、クエリで文字列操作を使ってはいけません。 名前付きのパラメータを使うようにするとさらに良いです。"
|
||||
#. Tag: para
|
||||
#: best_practices.xml:69
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"As in JDBC, always replace non-constant values by \"?\". Never use string "
|
||||
"manipulation to bind a non-constant value in a query! Even better, consider "
|
||||
"using named parameters in queries."
|
||||
msgstr ""
|
||||
"JDBCの場合と同じように、定数でない値は必ず\"?\"で置き換えましょう。 定数でな"
|
||||
"い値をバインドするために、クエリで文字列操作を使ってはいけません。 名前付きの"
|
||||
"パラメータを使うようにするとさらに良いです。"
|
||||
|
||||
#: index.docbook:77
|
||||
#. Tag: term
|
||||
#: best_practices.xml:77
|
||||
#, no-c-format
|
||||
msgid "Don't manage your own JDBC connections."
|
||||
msgstr "JDBCコネクションを管理してはいけません。"
|
||||
|
||||
#: index.docbook:79
|
||||
msgid "Hibernate lets the application manage JDBC connections. This approach should be considered a last-resort. If you can't use the built-in connections providers, consider providing your own implementation of <literal>org.hibernate.connection.ConnectionProvider</literal>."
|
||||
msgstr "HibernateではアプリケーションがJDBCコネクションを管理することが許されています。 しかしこれは最終手段だと思ってください。 組み込みのコネクションプロバイダを使うことができなければ、 <literal>org.hibernate.connection.ConnectionProvider</literal> を実装することを考えてください。"
|
||||
#. Tag: para
|
||||
#: best_practices.xml:79
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Hibernate lets the application manage JDBC connections. This approach should "
|
||||
"be considered a last-resort. If you can't use the built-in connections "
|
||||
"providers, consider providing your own implementation of <literal>org."
|
||||
"hibernate.connection.ConnectionProvider</literal>."
|
||||
msgstr ""
|
||||
"HibernateではアプリケーションがJDBCコネクションを管理することが許されていま"
|
||||
"す。 しかしこれは最終手段だと思ってください。 組み込みのコネクションプロバイ"
|
||||
"ダを使うことができなければ、 <literal>org.hibernate.connection."
|
||||
"ConnectionProvider</literal> を実装することを考えてください。"
|
||||
|
||||
#: index.docbook:87
|
||||
#. Tag: term
|
||||
#: best_practices.xml:87
|
||||
#, no-c-format
|
||||
msgid "Consider using a custom type."
|
||||
msgstr "カスタム型の使用を考えましょう。"
|
||||
|
||||
#: index.docbook:89
|
||||
msgid "Suppose you have a Java type, say from some library, that needs to be persisted but doesn't provide the accessors needed to map it as a component. You should consider implementing <literal>org.hibernate.UserType</literal>. This approach frees the application code from implementing transformations to / from a Hibernate type."
|
||||
msgstr "あるライブラリから持ってきたJava型を永続化する必要があるとしましょう。 しかしその型には、コンポーネントとしてマッピングするために必要なアクセサがないとします。 このような場合は <literal>org.hibernate.UserType</literal> の実装を考えるべきです。 そうすればHibernate型との実装変換を心配せずにアプリケーションのコードを扱えます。"
|
||||
#. Tag: para
|
||||
#: best_practices.xml:89
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Suppose you have a Java type, say from some library, that needs to be "
|
||||
"persisted but doesn't provide the accessors needed to map it as a component. "
|
||||
"You should consider implementing <literal>org.hibernate.UserType</literal>. "
|
||||
"This approach frees the application code from implementing transformations "
|
||||
"to / from a Hibernate type."
|
||||
msgstr ""
|
||||
"あるライブラリから持ってきたJava型を永続化する必要があるとしましょう。 しかし"
|
||||
"その型には、コンポーネントとしてマッピングするために必要なアクセサがないとし"
|
||||
"ます。 このような場合は <literal>org.hibernate.UserType</literal> の実装を考"
|
||||
"えるべきです。 そうすればHibernate型との実装変換を心配せずにアプリケーション"
|
||||
"のコードを扱えます。"
|
||||
|
||||
#: index.docbook:98
|
||||
#. Tag: term
|
||||
#: best_practices.xml:98
|
||||
#, no-c-format
|
||||
msgid "Use hand-coded JDBC in bottlenecks."
|
||||
msgstr "ボトルネックを解消するにはJDBCをハンドコードしましょう。"
|
||||
|
||||
#: index.docbook:100
|
||||
msgid "In performance-critical areas of the system, some kinds of operations might benefit from direct JDBC. But please, wait until you <emphasis>know</emphasis> something is a bottleneck. And don't assume that direct JDBC is necessarily faster. If you need to use direct JDBC, it might be worth opening a Hibernate <literal>Session</literal> and using that JDBC connection. That way you can still use the same transaction strategy and underlying connection provider."
|
||||
msgstr "システムのパフォーマンスクリティカルな領域では、 ある種の操作にJDBCを直接使うと良いかもしれません。 しかし何がボトルネックになっているか <emphasis>はっきりする</emphasis> までは待ってください。 またJDBCを直接使うからといって、必ずしも速くなるとは限らないことも理解してください。 JDBCを直接使う必要があれば、Hibernateの <literal>Session</literal> をオープンして、 JDBCコネクションを使うと良いかもしれません。 依然として同じトランザクション戦略とコネクションプロバイダが使えるからです。"
|
||||
#. Tag: para
|
||||
#: best_practices.xml:100
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"In performance-critical areas of the system, some kinds of operations might "
|
||||
"benefit from direct JDBC. But please, wait until you <emphasis>know</"
|
||||
"emphasis> something is a bottleneck. And don't assume that direct JDBC is "
|
||||
"necessarily faster. If you need to use direct JDBC, it might be worth "
|
||||
"opening a Hibernate <literal>Session</literal> and using that JDBC "
|
||||
"connection. That way you can still use the same transaction strategy and "
|
||||
"underlying connection provider."
|
||||
msgstr ""
|
||||
"システムのパフォーマンスクリティカルな領域では、 ある種の操作にJDBCを直接使う"
|
||||
"と良いかもしれません。 しかし何がボトルネックになっているか <emphasis>はっき"
|
||||
"りする</emphasis> までは待ってください。 またJDBCを直接使うからといって、必ず"
|
||||
"しも速くなるとは限らないことも理解してください。 JDBCを直接使う必要があれば、"
|
||||
"Hibernateの <literal>Session</literal> をオープンして、 JDBCコネクションを使"
|
||||
"うと良いかもしれません。 依然として同じトランザクション戦略とコネクションプロ"
|
||||
"バイダが使えるからです。"
|
||||
|
||||
#: index.docbook:110
|
||||
#. Tag: term
|
||||
#: best_practices.xml:110
|
||||
#, no-c-format
|
||||
msgid "Understand <literal>Session</literal> flushing."
|
||||
msgstr "<literal>Session</literal> のフラッシュを理解しましょう。"
|
||||
|
||||
#: index.docbook:112
|
||||
msgid "From time to time the Session synchronizes its persistent state with the database. Performance will be affected if this process occurs too often. You may sometimes minimize unnecessary flushing by disabling automatic flushing or even by changing the order of queries and other operations within a particular transaction."
|
||||
msgstr "Sessionが永続状態をデータベースと同期させることがときどきあります。 しかしこれがあまりに頻繁に起こるようだと、パフォーマンスに影響が出てきます。 自動フラッシュを無効にしたり、特定のトランザクションのクエリや操作の順番を変更することで、 不必要なフラッシュを最小限にできます。"
|
||||
#. Tag: para
|
||||
#: best_practices.xml:112
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"From time to time the Session synchronizes its persistent state with the "
|
||||
"database. Performance will be affected if this process occurs too often. You "
|
||||
"may sometimes minimize unnecessary flushing by disabling automatic flushing "
|
||||
"or even by changing the order of queries and other operations within a "
|
||||
"particular transaction."
|
||||
msgstr ""
|
||||
"Sessionが永続状態をデータベースと同期させることがときどきあります。 しかしこ"
|
||||
"れがあまりに頻繁に起こるようだと、パフォーマンスに影響が出てきます。 自動フ"
|
||||
"ラッシュを無効にしたり、特定のトランザクションのクエリや操作の順番を変更する"
|
||||
"ことで、 不必要なフラッシュを最小限にできます。"
|
||||
|
||||
#: index.docbook:121
|
||||
#. Tag: term
|
||||
#: best_practices.xml:121
|
||||
#, no-c-format
|
||||
msgid "In a three tiered architecture, consider using detached objects."
|
||||
msgstr "3層アーキテクチャでは分離オブジェクトの使用を考えましょう。"
|
||||
|
||||
#: index.docbook:123
|
||||
msgid "When using a servlet / session bean architecture, you could pass persistent objects loaded in the session bean to and from the servlet / JSP layer. Use a new session to service each request. Use <literal>Session.merge()</literal> or <literal>Session.saveOrUpdate()</literal> to synchronize objects with the database."
|
||||
msgstr "サーブレット / セッションビーンアーキテクチャを使うとき、 サーブレット層 / JSP層間でセッションビーンでロードした永続オブジェクトをやり取りできます。 その際リクエストごとに新しいSessionを使ってください。 また <literal>Session.merge()</literal> や <literal>Session.saveOrUpdate()</literal> を使って、オブジェクトとデータベースを同期させてください。"
|
||||
#. Tag: para
|
||||
#: best_practices.xml:123
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"When using a servlet / session bean architecture, you could pass persistent "
|
||||
"objects loaded in the session bean to and from the servlet / JSP layer. Use "
|
||||
"a new session to service each request. Use <literal>Session.merge()</"
|
||||
"literal> or <literal>Session.saveOrUpdate()</literal> to synchronize objects "
|
||||
"with the database."
|
||||
msgstr ""
|
||||
"サーブレット / セッションビーンアーキテクチャを使うとき、 サーブレット層 / "
|
||||
"JSP層間でセッションビーンでロードした永続オブジェクトをやり取りできます。 そ"
|
||||
"の際リクエストごとに新しいSessionを使ってください。 また <literal>Session."
|
||||
"merge()</literal> や <literal>Session.saveOrUpdate()</literal> を使って、オブ"
|
||||
"ジェクトとデータベースを同期させてください。"
|
||||
|
||||
#: index.docbook:132
|
||||
#. Tag: term
|
||||
#: best_practices.xml:132
|
||||
#, no-c-format
|
||||
msgid "In a two tiered architecture, consider using long persistence contexts."
|
||||
msgstr "2層アーキテクチャでは長い永続コンテキストの使用を考えましょう。"
|
||||
|
||||
#: index.docbook:134
|
||||
msgid "Database Transactions have to be as short as possible for best scalability. However, it is often neccessary to implement long running <emphasis>application transactions</emphasis>, a single unit-of-work from the point of view of a user. An application transaction might span several client request/response cycles. It is common to use detached objects to implement application transactions. An alternative, extremely appropriate in two tiered architecture, is to maintain a single open persistence contact (session) for the whole life cycle of the application transaction and simply disconnect from the JDBC connection at the end of each request and reconnect at the beginning of the subsequent request. Never share a single session across more than one application transaction, or you will be working with stale data."
|
||||
msgstr "最高のスケーラビリティを得るには、 データベーストランザクションをできるだけ短くしなければなりません。 しかし長い間実行する <emphasis>アプリケーショントランザクション</emphasis> の実装が必要なことはしばしばです。 これはユーザの視点からは1個の作業単位(unit of work)になります。 アプリケーショントランザクションはいくつかのクライアントのリクエスト/レスポンスサイクルにまたがります。 アプリケーショントランザクションの実装に分離オブジェクトを使うのは一般的です。 そうでなければ、2層アーキテクチャの場合は特に適切なことですが、 アプリケーショントランザクションのライフサイクル全体に対して 単一のオープンな永続化コンテキスト(セッション)を維持してください。 そして単純にリクエストの最後にJDBCコネクションから切断し、 次のリクエストの最初に再接続します。 決して複数のアプリケーショントランザクションユースケースに渡って 1個のSessionを使い回さないでください。 そうでなければ、古いデータで作業することになります。"
|
||||
#. Tag: para
|
||||
#: best_practices.xml:134
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Database Transactions have to be as short as possible for best scalability. "
|
||||
"However, it is often neccessary to implement long running "
|
||||
"<emphasis>application transactions</emphasis>, a single unit-of-work from "
|
||||
"the point of view of a user. An application transaction might span several "
|
||||
"client request/response cycles. It is common to use detached objects to "
|
||||
"implement application transactions. An alternative, extremely appropriate in "
|
||||
"two tiered architecture, is to maintain a single open persistence contact "
|
||||
"(session) for the whole life cycle of the application transaction and simply "
|
||||
"disconnect from the JDBC connection at the end of each request and reconnect "
|
||||
"at the beginning of the subsequent request. Never share a single session "
|
||||
"across more than one application transaction, or you will be working with "
|
||||
"stale data."
|
||||
msgstr ""
|
||||
"最高のスケーラビリティを得るには、 データベーストランザクションをできるだけ短"
|
||||
"くしなければなりません。 しかし長い間実行する <emphasis>アプリケーショントラ"
|
||||
"ンザクション</emphasis> の実装が必要なことはしばしばです。 これはユーザの視点"
|
||||
"からは1個の作業単位(unit of work)になります。 アプリケーショントランザク"
|
||||
"ションはいくつかのクライアントのリクエスト/レスポンスサイクルにまたがりま"
|
||||
"す。 アプリケーショントランザクションの実装に分離オブジェクトを使うのは一般的"
|
||||
"です。 そうでなければ、2層アーキテクチャの場合は特に適切なことですが、 アプリ"
|
||||
"ケーショントランザクションのライフサイクル全体に対して 単一のオープンな永続化"
|
||||
"コンテキスト(セッション)を維持してください。 そして単純にリクエストの最後に"
|
||||
"JDBCコネクションから切断し、 次のリクエストの最初に再接続します。 決して複数"
|
||||
"のアプリケーショントランザクションユースケースに渡って 1個のSessionを使い回さ"
|
||||
"ないでください。 そうでなければ、古いデータで作業することになります。"
|
||||
|
||||
#: index.docbook:148
|
||||
#. Tag: term
|
||||
#: best_practices.xml:148
|
||||
#, no-c-format
|
||||
msgid "Don't treat exceptions as recoverable."
|
||||
msgstr "例外を復帰可能なものとして扱ってはいけません。"
|
||||
|
||||
#: index.docbook:150
|
||||
msgid "This is more of a necessary practice than a \"best\" practice. When an exception occurs, roll back the <literal>Transaction</literal> and close the <literal>Session</literal>. If you don't, Hibernate can't guarantee that in-memory state accurately represents persistent state. As a special case of this, do not use <literal>Session.load()</literal> to determine if an instance with the given identifier exists on the database; use <literal>Session.get()</literal> or a query instead."
|
||||
msgstr "これは「ベスト」プラクティス以上の、必須のプラクティスです。 例外が発生したときは <literal>Transaction</literal> をロールバックして、 <literal>Session</literal> をクローズしてください。 そうしないとHibernateはメモリの状態が永続状態を正確に表現していることを保証できません。 この特別な場合として、与えられた識別子を持つインスタンスがデータベースに存在するかどうかを判定するために、 <literal>Session.load()</literal> を使うことはやめてください。 その代わりに <literal>Session.get()</literal> かクエリを使ってください。"
|
||||
#. Tag: para
|
||||
#: best_practices.xml:150
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"This is more of a necessary practice than a \"best\" practice. When an "
|
||||
"exception occurs, roll back the <literal>Transaction</literal> and close the "
|
||||
"<literal>Session</literal>. If you don't, Hibernate can't guarantee that in-"
|
||||
"memory state accurately represents persistent state. As a special case of "
|
||||
"this, do not use <literal>Session.load()</literal> to determine if an "
|
||||
"instance with the given identifier exists on the database; use "
|
||||
"<literal>Session.get()</literal> or a query instead."
|
||||
msgstr ""
|
||||
"これは「ベスト」プラクティス以上の、必須のプラクティスです。 例外が発生したと"
|
||||
"きは <literal>Transaction</literal> をロールバックして、 <literal>Session</"
|
||||
"literal> をクローズしてください。 そうしないとHibernateはメモリの状態が永続状"
|
||||
"態を正確に表現していることを保証できません。 この特別な場合として、与えられた"
|
||||
"識別子を持つインスタンスがデータベースに存在するかどうかを判定するために、 "
|
||||
"<literal>Session.load()</literal> を使うことはやめてください。 その代わりに "
|
||||
"<literal>Session.get()</literal> かクエリを使ってください。"
|
||||
|
||||
#: index.docbook:160
|
||||
#. Tag: term
|
||||
#: best_practices.xml:160
|
||||
#, no-c-format
|
||||
msgid "Prefer lazy fetching for associations."
|
||||
msgstr "関連にはなるべく遅延フェッチを使いましょう。"
|
||||
|
||||
#: index.docbook:162
|
||||
msgid "Use eager fetching sparingly. Use proxies and lazy collections for most associations to classes that are not likely to be completely held in the second-level cache. For associations to cached classes, where there is an a extremely high probability of a cache hit, explicitly disable eager fetching using <literal>lazy=\"false\"</literal>. When an join fetching is appropriate to a particular use case, use a query with a <literal>left join fetch</literal>."
|
||||
msgstr "即時フェッチは控えめにしましょう。 二次キャッシュには完全に保持されないようなクラスの関連には、 プロキシと遅延コレクションを使ってください。 キャッシュされるクラスの関連、つまりキャッシュがヒットする可能性が非常に高い関連は、 <literal>lazy=\"false\"</literal> で積極的なフェッチを明示的に無効にしてください。 結合フェッチが適切な特定のユースケースには、 クエリで <literal>left join fetch</literal> を使ってください。"
|
||||
#. Tag: para
|
||||
#: best_practices.xml:162
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Use eager fetching sparingly. Use proxies and lazy collections for most "
|
||||
"associations to classes that are not likely to be completely held in the "
|
||||
"second-level cache. For associations to cached classes, where there is an a "
|
||||
"extremely high probability of a cache hit, explicitly disable eager fetching "
|
||||
"using <literal>lazy=\"false\"</literal>. When an join fetching is "
|
||||
"appropriate to a particular use case, use a query with a <literal>left join "
|
||||
"fetch</literal>."
|
||||
msgstr ""
|
||||
"即時フェッチは控えめにしましょう。 二次キャッシュには完全に保持されないような"
|
||||
"クラスの関連には、 プロキシと遅延コレクションを使ってください。 キャッシュさ"
|
||||
"れるクラスの関連、つまりキャッシュがヒットする可能性が非常に高い関連は、 "
|
||||
"<literal>lazy=\"false\"</literal> で積極的なフェッチを明示的に無効にしてくだ"
|
||||
"さい。 結合フェッチが適切な特定のユースケースには、 クエリで <literal>left "
|
||||
"join fetch</literal> を使ってください。"
|
||||
|
||||
#: index.docbook:172
|
||||
msgid "Use the <emphasis>open session in view</emphasis> pattern, or a disciplined <emphasis>assembly phase</emphasis> to avoid problems with unfetched data."
|
||||
msgstr "フェッチされていないデータに関わる問題を避けるために、 <emphasis>ビューの中でオープンセッションを使う(open session in view)</emphasis> パターンか、統制された <emphasis>組み立てフェーズ(assembly phase)</emphasis> を使いましょう。"
|
||||
#. Tag: term
|
||||
#: best_practices.xml:172
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Use the <emphasis>open session in view</emphasis> pattern, or a disciplined "
|
||||
"<emphasis>assembly phase</emphasis> to avoid problems with unfetched data."
|
||||
msgstr ""
|
||||
"フェッチされていないデータに関わる問題を避けるために、 <emphasis>ビューの中で"
|
||||
"オープンセッションを使う(open session in view)</emphasis> パターンか、統制さ"
|
||||
"れた <emphasis>組み立てフェーズ(assembly phase)</emphasis> を使いましょう。"
|
||||
|
||||
#: index.docbook:177
|
||||
msgid "Hibernate frees the developer from writing tedious <emphasis>Data Transfer Objects</emphasis> (DTO). In a traditional EJB architecture, DTOs serve dual purposes: first, they work around the problem that entity beans are not serializable; second, they implicitly define an assembly phase where all data to be used by the view is fetched and marshalled into the DTOs before returning control to the presentation tier. Hibernate eliminates the first purpose. However, you will still need an assembly phase (think of your business methods as having a strict contract with the presentation tier about what data is available in the detached objects) unless you are prepared to hold the persistence context (the session) open across the view rendering process. This is not a limitation of Hibernate! It is a fundamental requirement of safe transactional data access."
|
||||
msgstr "Hibernateは <emphasis>Data Transfer Objects</emphasis> (DTO)を書く退屈な作業から開発者を解放します。 伝統的なEJBアーキテクチャではDTOは二つ目的があります: 1つ目は、エンティティビーンがシリアライズされない問題への対策です。 2つ目は、プレゼンテーション層に制御が戻る前に、 ビューに使われるすべてのデータがフェッチされて、DTOに復元されるような組み立てフェーズを暗黙的に定義します。 Hibernateでは1つ目の目的が不要になります。 しかしビューのレンダリング処理の間、永続コンテキスト(セッション)をオープンにしたままにしなければ、 組み立てフェーズはまだ必要です(分離オブジェクトの中のどのデータが利用可能かについて、 プレゼンテーション層と厳密な取り決めをしているビジネスメソッドを考えてみてください)。 これはHibernate側の問題ではありません。 トランザクション内で安全にデータアクセスするための基本的な要件です。"
|
||||
#. Tag: para
|
||||
#: best_practices.xml:177
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Hibernate frees the developer from writing tedious <emphasis>Data Transfer "
|
||||
"Objects</emphasis> (DTO). In a traditional EJB architecture, DTOs serve dual "
|
||||
"purposes: first, they work around the problem that entity beans are not "
|
||||
"serializable; second, they implicitly define an assembly phase where all "
|
||||
"data to be used by the view is fetched and marshalled into the DTOs before "
|
||||
"returning control to the presentation tier. Hibernate eliminates the first "
|
||||
"purpose. However, you will still need an assembly phase (think of your "
|
||||
"business methods as having a strict contract with the presentation tier "
|
||||
"about what data is available in the detached objects) unless you are "
|
||||
"prepared to hold the persistence context (the session) open across the view "
|
||||
"rendering process. This is not a limitation of Hibernate! It is a "
|
||||
"fundamental requirement of safe transactional data access."
|
||||
msgstr ""
|
||||
"Hibernateは <emphasis>Data Transfer Objects</emphasis> (DTO)を書く退屈な作業"
|
||||
"から開発者を解放します。 伝統的なEJBアーキテクチャではDTOは二つ目的がありま"
|
||||
"す: 1つ目は、エンティティビーンがシリアライズされない問題への対策です。 2つ"
|
||||
"目は、プレゼンテーション層に制御が戻る前に、 ビューに使われるすべてのデータが"
|
||||
"フェッチされて、DTOに復元されるような組み立てフェーズを暗黙的に定義します。 "
|
||||
"Hibernateでは1つ目の目的が不要になります。 しかしビューのレンダリング処理の"
|
||||
"間、永続コンテキスト(セッション)をオープンにしたままにしなければ、 組み立て"
|
||||
"フェーズはまだ必要です(分離オブジェクトの中のどのデータが利用可能かについ"
|
||||
"て、 プレゼンテーション層と厳密な取り決めをしているビジネスメソッドを考えてみ"
|
||||
"てください)。 これはHibernate側の問題ではありません。 トランザクション内で安"
|
||||
"全にデータアクセスするための基本的な要件です。"
|
||||
|
||||
#: index.docbook:191
|
||||
#. Tag: term
|
||||
#: best_practices.xml:191
|
||||
#, no-c-format
|
||||
msgid "Consider abstracting your business logic from Hibernate."
|
||||
msgstr "Hibernateからビジネスロジックを抽象化することを考えましょう。"
|
||||
|
||||
#: index.docbook:193
|
||||
msgid "Hide (Hibernate) data-access code behind an interface. Combine the <emphasis>DAO</emphasis> and <emphasis>Thread Local Session</emphasis> patterns. You can even have some classes persisted by handcoded JDBC, associated to Hibernate via a <literal>UserType</literal>. (This advice is intended for \"sufficiently large\" applications; it is not appropriate for an application with five tables!)"
|
||||
msgstr "インターフェイスで(Hibernateの)データアクセスコードを隠蔽しましょう。 <emphasis>DAO</emphasis> と <emphasis>Thread Local Session</emphasis> パターンを組み合わせましょう。 <literal>UserType</literal> でHibernateに関連付けると、 ハンドコードしたJDBCで永続化するクラスを持つこともできます。 (このアドバイスは「十分大きな」アプリケーションに対してのものです。 テーブルが5個しかないようなアプリケーションには当てはまりません。)"
|
||||
#. Tag: para
|
||||
#: best_practices.xml:193
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Hide (Hibernate) data-access code behind an interface. Combine the "
|
||||
"<emphasis>DAO</emphasis> and <emphasis>Thread Local Session</emphasis> "
|
||||
"patterns. You can even have some classes persisted by handcoded JDBC, "
|
||||
"associated to Hibernate via a <literal>UserType</literal>. (This advice is "
|
||||
"intended for \"sufficiently large\" applications; it is not appropriate for "
|
||||
"an application with five tables!)"
|
||||
msgstr ""
|
||||
"インターフェイスで(Hibernateの)データアクセスコードを隠蔽しましょう。 "
|
||||
"<emphasis>DAO</emphasis> と <emphasis>Thread Local Session</emphasis> パター"
|
||||
"ンを組み合わせましょう。 <literal>UserType</literal> でHibernateに関連付ける"
|
||||
"と、 ハンドコードしたJDBCで永続化するクラスを持つこともできます。 (このアド"
|
||||
"バイスは「十分大きな」アプリケーションに対してのものです。 テーブルが5個しか"
|
||||
"ないようなアプリケーションには当てはまりません。)"
|
||||
|
||||
#: index.docbook:203
|
||||
#. Tag: term
|
||||
#: best_practices.xml:203
|
||||
#, no-c-format
|
||||
msgid "Don't use exotic association mappings."
|
||||
msgstr "珍しい関連マッピングは使わないようにしましょう。"
|
||||
|
||||
#: index.docbook:205
|
||||
msgid "Good usecases for a real many-to-many associations are rare. Most of the time you need additional information stored in the \"link table\". In this case, it is much better to use two one-to-many associations to an intermediate link class. In fact, we think that most associations are one-to-many and many-to-one, you should be careful when using any other association style and ask yourself if it is really neccessary."
|
||||
msgstr "よいユースケースに本当の多対多関連があることは稀(まれ)です。 ほとんどの場合「リンクテーブル」の付加的な情報が必要になります。 この場合、リンククラスに2つの1対多関連を使う方がずっと良いです。 実際ほとんどの場合関連は1対多と多対1なので、 他のスタイルの関連を使うときは本当に必要かどうかを考えてみてください。"
|
||||
#. Tag: para
|
||||
#: best_practices.xml:205
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Good usecases for a real many-to-many associations are rare. Most of the "
|
||||
"time you need additional information stored in the \"link table\". In this "
|
||||
"case, it is much better to use two one-to-many associations to an "
|
||||
"intermediate link class. In fact, we think that most associations are one-to-"
|
||||
"many and many-to-one, you should be careful when using any other association "
|
||||
"style and ask yourself if it is really neccessary."
|
||||
msgstr ""
|
||||
"よいユースケースに本当の多対多関連があることは稀(まれ)です。 ほとんどの場合"
|
||||
"「リンクテーブル」の付加的な情報が必要になります。 この場合、リンククラスに2"
|
||||
"つの1対多関連を使う方がずっと良いです。 実際ほとんどの場合関連は1対多と多対1"
|
||||
"なので、 他のスタイルの関連を使うときは本当に必要かどうかを考えてみてくださ"
|
||||
"い。"
|
||||
|
||||
#: index.docbook:215
|
||||
#. Tag: term
|
||||
#: best_practices.xml:215
|
||||
#, no-c-format
|
||||
msgid "Prefer bidirectional associations."
|
||||
msgstr "なるべく双方向関連にしましょう。"
|
||||
|
||||
#: index.docbook:217
|
||||
msgid "Unidirectional associations are more difficult to query. In a large application, almost all associations must be navigable in both directions in queries."
|
||||
msgstr "単方向関連は双方向に比べて検索が難しくなります。 大きなアプリケーションでは、 ほとんどすべての関連が双方向にナビゲーションできなければなりません。"
|
||||
|
||||
msgid "ROLES_OF_TRANSLATORS"
|
||||
msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
|
||||
|
||||
msgid "CREDIT_FOR_TRANSLATORS"
|
||||
msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
|
||||
|
||||
#. Tag: para
|
||||
#: best_practices.xml:217
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Unidirectional associations are more difficult to query. In a large "
|
||||
"application, almost all associations must be navigable in both directions in "
|
||||
"queries."
|
||||
msgstr ""
|
||||
"単方向関連は双方向に比べて検索が難しくなります。 大きなアプリケーションで"
|
||||
"は、 ほとんどすべての関連が双方向にナビゲーションできなければなりません。"
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,354 +1,471 @@
|
|||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2007-10-25 07:47+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
#: index.docbook:5
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#. Tag: title
|
||||
#: events.xml:5
|
||||
#, no-c-format
|
||||
msgid "Interceptors and events"
|
||||
msgstr "インターセプタとイベント"
|
||||
|
||||
#: index.docbook:7
|
||||
msgid "It is often useful for the application to react to certain events that occur inside Hibernate. This allows implementation of certain kinds of generic functionality, and extension of Hibernate functionality."
|
||||
msgstr "アプリケーションがHibernateの内部で発生するイベントに対応できると役に立つことがあります。 ある種の一般的な機能を実装できるようになり、 またHibernateの機能を拡張することもできるようになります。"
|
||||
#. Tag: para
|
||||
#: events.xml:7
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"It is often useful for the application to react to certain events that occur "
|
||||
"inside Hibernate. This allows implementation of certain kinds of generic "
|
||||
"functionality, and extension of Hibernate functionality."
|
||||
msgstr ""
|
||||
"アプリケーションがHibernateの内部で発生するイベントに対応できると役に立つこと"
|
||||
"があります。 ある種の一般的な機能を実装できるようになり、 またHibernateの機能"
|
||||
"を拡張することもできるようになります。"
|
||||
|
||||
#: index.docbook:14
|
||||
#. Tag: title
|
||||
#: events.xml:14
|
||||
#, no-c-format
|
||||
msgid "Interceptors"
|
||||
msgstr "インターセプタ"
|
||||
|
||||
#: index.docbook:16
|
||||
msgid "The <literal>Interceptor</literal> interface provides callbacks from the session to the application allowing the application to inspect and/or manipulate properties of a persistent object before it is saved, updated, deleted or loaded. One possible use for this is to track auditing information. For example, the following <literal>Interceptor</literal> automatically sets the <literal>createTimestamp</literal> when an <literal>Auditable</literal> is created and updates the <literal>lastUpdateTimestamp</literal> property when an <literal>Auditable</literal> is updated."
|
||||
msgstr "<literal>Interceptor</literal> インターフェイスを使って、 セッションからアプリケーションへコールバックをすることができます。 これにより永続オブジェクトの保存、更新、削除、読み込みの前に、 アプリケーションがプロパティを検査したり操作したりできるようになります。 これは監査情報の追跡に利用できます。 下の例で <literal>Interceptor</literal> は <literal>Auditable</literal> が作成されると自動的に <literal>createTimestamp</literal> を設定し、 <literal>Auditable</literal> が更新されると自動的に <literal>lastUpdateTimestamp</literal> プロパティを更新します。"
|
||||
|
||||
#: index.docbook:27
|
||||
msgid "You may either implement <literal>Interceptor</literal> directly or (better) extend <literal>EmptyInterceptor</literal>."
|
||||
msgstr "<literal>Interceptor</literal> を直接実装したり、 (さらによいのは)<literal>EmptyInterceptor</literal> を拡張したりできます。"
|
||||
|
||||
#: index.docbook:32
|
||||
#. Tag: para
|
||||
#: events.xml:16
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[package org.hibernate.test;\n"
|
||||
"\n"
|
||||
"import java.io.Serializable;\n"
|
||||
"import java.util.Date;\n"
|
||||
"import java.util.Iterator;\n"
|
||||
"\n"
|
||||
"import org.hibernate.EmptyInterceptor;\n"
|
||||
"import org.hibernate.Transaction;\n"
|
||||
"import org.hibernate.type.Type;\n"
|
||||
"\n"
|
||||
"public class AuditInterceptor extends EmptyInterceptor {\n"
|
||||
"\n"
|
||||
" private int updates;\n"
|
||||
" private int creates;\n"
|
||||
" private int loads;\n"
|
||||
"\n"
|
||||
" public void onDelete(Object entity,\n"
|
||||
" Serializable id,\n"
|
||||
" Object[] state,\n"
|
||||
" String[] propertyNames,\n"
|
||||
" Type[] types) {\n"
|
||||
" // do nothing\n"
|
||||
" }\n"
|
||||
"\n"
|
||||
" public boolean onFlushDirty(Object entity,\n"
|
||||
" Serializable id,\n"
|
||||
" Object[] currentState,\n"
|
||||
" Object[] previousState,\n"
|
||||
" String[] propertyNames,\n"
|
||||
" Type[] types) {\n"
|
||||
"\n"
|
||||
" if ( entity instanceof Auditable ) {\n"
|
||||
" updates++;\n"
|
||||
" for ( int i=0; i < propertyNames.length; i++ ) {\n"
|
||||
" if ( \"lastUpdateTimestamp\".equals( propertyNames[i] ) ) {\n"
|
||||
" currentState[i] = new Date();\n"
|
||||
" return true;\n"
|
||||
" }\n"
|
||||
" }\n"
|
||||
" }\n"
|
||||
" return false;\n"
|
||||
" }\n"
|
||||
"\n"
|
||||
" public boolean onLoad(Object entity,\n"
|
||||
" Serializable id,\n"
|
||||
" Object[] state,\n"
|
||||
" String[] propertyNames,\n"
|
||||
" Type[] types) {\n"
|
||||
" if ( entity instanceof Auditable ) {\n"
|
||||
" loads++;\n"
|
||||
" }\n"
|
||||
" return false;\n"
|
||||
" }\n"
|
||||
"\n"
|
||||
" public boolean onSave(Object entity,\n"
|
||||
" Serializable id,\n"
|
||||
" Object[] state,\n"
|
||||
" String[] propertyNames,\n"
|
||||
" Type[] types) {\n"
|
||||
"\n"
|
||||
" if ( entity instanceof Auditable ) {\n"
|
||||
" creates++;\n"
|
||||
" for ( int i=0; i<propertyNames.length; i++ ) {\n"
|
||||
" if ( \"createTimestamp\".equals( propertyNames[i] ) ) {\n"
|
||||
" state[i] = new Date();\n"
|
||||
" return true;\n"
|
||||
" }\n"
|
||||
" }\n"
|
||||
" }\n"
|
||||
" return false;\n"
|
||||
" }\n"
|
||||
"\n"
|
||||
" public void afterTransactionCompletion(Transaction tx) {\n"
|
||||
" if ( tx.wasCommitted() ) {\n"
|
||||
" System.out.println(\"Creations: \" + creates + \", Updates: \" + updates, \"Loads: \" + loads);\n"
|
||||
" }\n"
|
||||
" updates=0;\n"
|
||||
" creates=0;\n"
|
||||
" loads=0;\n"
|
||||
" }\n"
|
||||
"\n"
|
||||
"}]]>"
|
||||
"The <literal>Interceptor</literal> interface provides callbacks from the "
|
||||
"session to the application allowing the application to inspect and/or "
|
||||
"manipulate properties of a persistent object before it is saved, updated, "
|
||||
"deleted or loaded. One possible use for this is to track auditing "
|
||||
"information. For example, the following <literal>Interceptor</literal> "
|
||||
"automatically sets the <literal>createTimestamp</literal> when an "
|
||||
"<literal>Auditable</literal> is created and updates the "
|
||||
"<literal>lastUpdateTimestamp</literal> property when an <literal>Auditable</"
|
||||
"literal> is updated."
|
||||
msgstr ""
|
||||
"<![CDATA[package org.hibernate.test;
\n"
|
||||
"
\n"
|
||||
"import java.io.Serializable;
\n"
|
||||
"import java.util.Date;
\n"
|
||||
"import java.util.Iterator;
\n"
|
||||
"
\n"
|
||||
"import org.hibernate.EmptyInterceptor;
\n"
|
||||
"import org.hibernate.Transaction;
\n"
|
||||
"import org.hibernate.type.Type;
\n"
|
||||
"
\n"
|
||||
"public class AuditInterceptor extends EmptyInterceptor {
\n"
|
||||
"
\n"
|
||||
" private int updates;
\n"
|
||||
" private int creates;
\n"
|
||||
" private int loads;
\n"
|
||||
"
\n"
|
||||
" public void onDelete(Object entity,
\n"
|
||||
" Serializable id,
\n"
|
||||
" Object[] state,
\n"
|
||||
" String[] propertyNames,
\n"
|
||||
" Type[] types) {
\n"
|
||||
" // do nothing
\n"
|
||||
" }
\n"
|
||||
"
\n"
|
||||
" public boolean onFlushDirty(Object entity,
\n"
|
||||
" Serializable id,
\n"
|
||||
" Object[] currentState,
\n"
|
||||
" Object[] previousState,
\n"
|
||||
" String[] propertyNames,
\n"
|
||||
" Type[] types) {
\n"
|
||||
"
\n"
|
||||
" if ( entity instanceof Auditable ) {
\n"
|
||||
" updates++;
\n"
|
||||
" for ( int i=0; i < propertyNames.length; i++ ) {
\n"
|
||||
" if ( \"lastUpdateTimestamp\".equals( propertyNames[i] ) ) {
\n"
|
||||
" currentState[i] = new Date();
\n"
|
||||
" return true;
\n"
|
||||
" }
\n"
|
||||
" }
\n"
|
||||
" }
\n"
|
||||
" return false;
\n"
|
||||
" }
\n"
|
||||
"
\n"
|
||||
" public boolean onLoad(Object entity,
\n"
|
||||
" Serializable id,
\n"
|
||||
" Object[] state,
\n"
|
||||
" String[] propertyNames,
\n"
|
||||
" Type[] types) {
\n"
|
||||
" if ( entity instanceof Auditable ) {
\n"
|
||||
" loads++;
\n"
|
||||
" }
\n"
|
||||
" return false;
\n"
|
||||
" }
\n"
|
||||
"
\n"
|
||||
" public boolean onSave(Object entity,
\n"
|
||||
" Serializable id,
\n"
|
||||
" Object[] state,
\n"
|
||||
" String[] propertyNames,
\n"
|
||||
" Type[] types) {
\n"
|
||||
"
\n"
|
||||
" if ( entity instanceof Auditable ) {
\n"
|
||||
" creates++;
\n"
|
||||
" for ( int i=0; i<propertyNames.length; i++ ) {
\n"
|
||||
" if ( \"createTimestamp\".equals( propertyNames[i] ) ) {
\n"
|
||||
" state[i] = new Date();
\n"
|
||||
" return true;
\n"
|
||||
" }
\n"
|
||||
" }
\n"
|
||||
" }
\n"
|
||||
" return false;
\n"
|
||||
" }
\n"
|
||||
"
\n"
|
||||
" public void afterTransactionCompletion(Transaction tx) {
\n"
|
||||
" if ( tx.wasCommitted() ) {
\n"
|
||||
" System.out.println(\"Creations: \" + creates + \", Updates: \" + updates, \"Loads: \" + loads);
\n"
|
||||
" }
\n"
|
||||
" updates=0;
\n"
|
||||
" creates=0;
\n"
|
||||
" loads=0;
\n"
|
||||
" }
\n"
|
||||
"
\n"
|
||||
"}]]>"
|
||||
"<literal>Interceptor</literal> インターフェイスを使って、 セッションからアプ"
|
||||
"リケーションへコールバックをすることができます。 これにより永続オブジェクトの"
|
||||
"保存、更新、削除、読み込みの前に、 アプリケーションがプロパティを検査したり操"
|
||||
"作したりできるようになります。 これは監査情報の追跡に利用できます。 下の例で "
|
||||
"<literal>Interceptor</literal> は <literal>Auditable</literal> が作成されると"
|
||||
"自動的に <literal>createTimestamp</literal> を設定し、 <literal>Auditable</"
|
||||
"literal> が更新されると自動的に <literal>lastUpdateTimestamp</literal> プロパ"
|
||||
"ティを更新します。"
|
||||
|
||||
#: index.docbook:34
|
||||
msgid "Interceptors come in two flavors: <literal>Session</literal>-scoped and <literal>SessionFactory</literal>-scoped."
|
||||
msgstr "インターセプタには二種類あります: <literal>Session</literal> スコープのものと <literal>SessionFactory</literal> スコープのものです。"
|
||||
#. Tag: para
|
||||
#: events.xml:27
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"You may either implement <literal>Interceptor</literal> directly or (better) "
|
||||
"extend <literal>EmptyInterceptor</literal>."
|
||||
msgstr ""
|
||||
"<literal>Interceptor</literal> を直接実装したり、 (さらによいのは)"
|
||||
"<literal>EmptyInterceptor</literal> を拡張したりできます。"
|
||||
|
||||
#: index.docbook:39
|
||||
msgid "A <literal>Session</literal>-scoped interceptor is specified when a session is opened using one of the overloaded SessionFactory.openSession() methods accepting an <literal>Interceptor</literal>."
|
||||
msgstr "<literal>Session</literal> スコープのインターセプタは、 セッションをオープンするときに指定します。 <literal>Interceptor</literal> を引数に取るSessionFactory.openSession() のオーバーロードメソッドの一つを使います。"
|
||||
#. Tag: programlisting
|
||||
#: events.xml:32
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[package org.hibernate.test;\n"
|
||||
"\n"
|
||||
"import java.io.Serializable;\n"
|
||||
"import java.util.Date;\n"
|
||||
"import java.util.Iterator;\n"
|
||||
"\n"
|
||||
"import org.hibernate.EmptyInterceptor;\n"
|
||||
"import org.hibernate.Transaction;\n"
|
||||
"import org.hibernate.type.Type;\n"
|
||||
"\n"
|
||||
"public class AuditInterceptor extends EmptyInterceptor {\n"
|
||||
"\n"
|
||||
" private int updates;\n"
|
||||
" private int creates;\n"
|
||||
" private int loads;\n"
|
||||
"\n"
|
||||
" public void onDelete(Object entity,\n"
|
||||
" Serializable id,\n"
|
||||
" Object[] state,\n"
|
||||
" String[] propertyNames,\n"
|
||||
" Type[] types) {\n"
|
||||
" // do nothing\n"
|
||||
" }\n"
|
||||
"\n"
|
||||
" public boolean onFlushDirty(Object entity,\n"
|
||||
" Serializable id,\n"
|
||||
" Object[] currentState,\n"
|
||||
" Object[] previousState,\n"
|
||||
" String[] propertyNames,\n"
|
||||
" Type[] types) {\n"
|
||||
"\n"
|
||||
" if ( entity instanceof Auditable ) {\n"
|
||||
" updates++;\n"
|
||||
" for ( int i=0; i < propertyNames.length; i++ ) {\n"
|
||||
" if ( \"lastUpdateTimestamp\".equals( propertyNames[i] ) ) {\n"
|
||||
" currentState[i] = new Date();\n"
|
||||
" return true;\n"
|
||||
" }\n"
|
||||
" }\n"
|
||||
" }\n"
|
||||
" return false;\n"
|
||||
" }\n"
|
||||
"\n"
|
||||
" public boolean onLoad(Object entity,\n"
|
||||
" Serializable id,\n"
|
||||
" Object[] state,\n"
|
||||
" String[] propertyNames,\n"
|
||||
" Type[] types) {\n"
|
||||
" if ( entity instanceof Auditable ) {\n"
|
||||
" loads++;\n"
|
||||
" }\n"
|
||||
" return false;\n"
|
||||
" }\n"
|
||||
"\n"
|
||||
" public boolean onSave(Object entity,\n"
|
||||
" Serializable id,\n"
|
||||
" Object[] state,\n"
|
||||
" String[] propertyNames,\n"
|
||||
" Type[] types) {\n"
|
||||
"\n"
|
||||
" if ( entity instanceof Auditable ) {\n"
|
||||
" creates++;\n"
|
||||
" for ( int i=0; i<propertyNames.length; i++ ) {\n"
|
||||
" if ( \"createTimestamp\".equals( propertyNames[i] ) ) {\n"
|
||||
" state[i] = new Date();\n"
|
||||
" return true;\n"
|
||||
" }\n"
|
||||
" }\n"
|
||||
" }\n"
|
||||
" return false;\n"
|
||||
" }\n"
|
||||
"\n"
|
||||
" public void afterTransactionCompletion(Transaction tx) {\n"
|
||||
" if ( tx.wasCommitted() ) {\n"
|
||||
" System.out.println(\"Creations: \" + creates + \", Updates: \" + "
|
||||
"updates, \"Loads: \" + loads);\n"
|
||||
" }\n"
|
||||
" updates=0;\n"
|
||||
" creates=0;\n"
|
||||
" loads=0;\n"
|
||||
" }\n"
|
||||
"\n"
|
||||
"}]]>"
|
||||
msgstr ""
|
||||
|
||||
#: index.docbook:45
|
||||
#. Tag: para
|
||||
#: events.xml:34
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Interceptors come in two flavors: <literal>Session</literal>-scoped and "
|
||||
"<literal>SessionFactory</literal>-scoped."
|
||||
msgstr ""
|
||||
"インターセプタには二種類あります: <literal>Session</literal> スコープのもの"
|
||||
"と <literal>SessionFactory</literal> スコープのものです。"
|
||||
|
||||
#. Tag: para
|
||||
#: events.xml:39
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"A <literal>Session</literal>-scoped interceptor is specified when a session "
|
||||
"is opened using one of the overloaded SessionFactory.openSession() methods "
|
||||
"accepting an <literal>Interceptor</literal>."
|
||||
msgstr ""
|
||||
"<literal>Session</literal> スコープのインターセプタは、 セッションをオープン"
|
||||
"するときに指定します。 <literal>Interceptor</literal> を引数に取る"
|
||||
"SessionFactory.openSession() のオーバーロードメソッドの一つを使います。"
|
||||
|
||||
#. Tag: programlisting
|
||||
#: events.xml:45
|
||||
#, no-c-format
|
||||
msgid "<![CDATA[Session session = sf.openSession( new AuditInterceptor() );]]>"
|
||||
msgstr "<![CDATA[Session session = sf.openSession( new AuditInterceptor() );]]>"
|
||||
msgstr ""
|
||||
|
||||
#: index.docbook:47
|
||||
msgid "A <literal>SessionFactory</literal>-scoped interceptor is registered with the <literal>Configuration</literal> object prior to building the <literal>SessionFactory</literal>. In this case, the supplied interceptor will be applied to all sessions opened from that <literal>SessionFactory</literal>; this is true unless a session is opened explicitly specifying the interceptor to use. <literal>SessionFactory</literal>-scoped interceptors must be thread safe, taking care to not store session-specific state since multiple sessions will use this interceptor (potentially) concurrently."
|
||||
msgstr "<literal>SessionFactory</literal> スコープのインターセプタは <literal>Configuration</literal> オブジェクトを使って登録します。 これは <literal>SessionFactory</literal> の構築よりも優先されます。 この場合、提供されるインターセプタは <literal>SessionFactory</literal> からオープンされたすべてのセッションに適用されます。 これは使用するインターセプタを明示的に指定してセッションをオープンしない限り、そうなります。 <literal>SessionFactory</literal> スコープのインターセプタはスレッドセーフでなければなりません。 複数のセッションが(潜在的に)このインターセプタを同時並行で使用することになるため、 セッション固有の状態を格納しないように気をつけてください。"
|
||||
#. Tag: para
|
||||
#: events.xml:47
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"A <literal>SessionFactory</literal>-scoped interceptor is registered with "
|
||||
"the <literal>Configuration</literal> object prior to building the "
|
||||
"<literal>SessionFactory</literal>. In this case, the supplied interceptor "
|
||||
"will be applied to all sessions opened from that <literal>SessionFactory</"
|
||||
"literal>; this is true unless a session is opened explicitly specifying the "
|
||||
"interceptor to use. <literal>SessionFactory</literal>-scoped interceptors "
|
||||
"must be thread safe, taking care to not store session-specific state since "
|
||||
"multiple sessions will use this interceptor (potentially) concurrently."
|
||||
msgstr ""
|
||||
"<literal>SessionFactory</literal> スコープのインターセプタは "
|
||||
"<literal>Configuration</literal> オブジェクトを使って登録します。 これは "
|
||||
"<literal>SessionFactory</literal> の構築よりも優先されます。 この場合、提供さ"
|
||||
"れるインターセプタは <literal>SessionFactory</literal> からオープンされたすべ"
|
||||
"てのセッションに適用されます。 これは使用するインターセプタを明示的に指定して"
|
||||
"セッションをオープンしない限り、そうなります。 <literal>SessionFactory</"
|
||||
"literal> スコープのインターセプタはスレッドセーフでなければなりません。 複数"
|
||||
"のセッションが(潜在的に)このインターセプタを同時並行で使用することになるた"
|
||||
"め、 セッション固有の状態を格納しないように気をつけてください。"
|
||||
|
||||
#: index.docbook:56
|
||||
msgid "<![CDATA[new Configuration().setInterceptor( new AuditInterceptor() );]]>"
|
||||
msgstr "<![CDATA[new Configuration().setInterceptor( new AuditInterceptor() );]]>"
|
||||
#. Tag: programlisting
|
||||
#: events.xml:56
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[new Configuration().setInterceptor( new AuditInterceptor() );]]>"
|
||||
msgstr ""
|
||||
|
||||
#: index.docbook:61
|
||||
#. Tag: title
|
||||
#: events.xml:61
|
||||
#, no-c-format
|
||||
msgid "Event system"
|
||||
msgstr "イベントシステム"
|
||||
|
||||
#: index.docbook:63
|
||||
msgid "If you have to react to particular events in your persistence layer, you may also use the Hibernate3 <emphasis>event</emphasis> architecture. The event system can be used in addition or as a replacement for interceptors."
|
||||
msgstr "永続化層で特定のイベントに対応しなければならない場合、 Hibernate3の <emphasis>イベント</emphasis> アーキテクチャを使うこともできます。 イベントシステムはインターセプタと一緒に使うか、またはインターセプタの代わりとして使うことができます。"
|
||||
|
||||
#: index.docbook:69
|
||||
msgid "Essentially all of the methods of the <literal>Session</literal> interface correlate to an event. You have a <literal>LoadEvent</literal>, a <literal>FlushEvent</literal>, etc (consult the XML configuration-file DTD or the <literal>org.hibernate.event</literal> package for the full list of defined event types). When a request is made of one of these methods, the Hibernate <literal>Session</literal> generates an appropriate event and passes it to the configured event listeners for that type. Out-of-the-box, these listeners implement the same processing in which those methods always resulted. However, you are free to implement a customization of one of the listener interfaces (i.e., the <literal>LoadEvent</literal> is processed by the registered implemenation of the <literal>LoadEventListener</literal> interface), in which case their implementation would be responsible for processing any <literal>load()</literal> requests made of the <literal>Session</literal>."
|
||||
msgstr "本質的に <literal>Session</literal> インターフェイスのすべてのメソッドは、 1個のイベントと相互に関連します。 例えば <literal>LoadEvent</literal>、<literal>FlushEvent</literal> などがあります (定義済みのイベント型の一覧については、XML設定ファイルのDTDや <literal>org.hibernate.event</literal> パッケージを調べてください)。 リクエストがこれらのメソッドの1つから作られるとき、 Hibernateの <literal>Session</literal> は適切なイベントを生成し、 そのイベント型に設定されたイベントリスナに渡します。 すばらしいことに、これらのリスナはそのメソッドと同じ処理を実装します。 とはいえ、リスナインターフェイスの一つを自由にカスタム実装できます (つまり、<literal>LoadEvent</literal> は登録された <literal>LoadEventListener</literal> インターフェイスの実装により処理されます)。 その場合、その実装には <literal>Session</literal> から作られたどのような <literal>load()</literal> リクエストをも処理する責任があります。"
|
||||
|
||||
#: index.docbook:84
|
||||
msgid "The listeners should be considered effectively singletons; meaning, they are shared between requests, and thus should not save any state as instance variables."
|
||||
msgstr "リスナは事実上シングルトンであると見なせます。 つまりリスナはリクエスト間で共有されるため、 インスタンス変数として状態を保持するべきではないということです。"
|
||||
|
||||
#: index.docbook:89
|
||||
msgid "A custom listener should implement the appropriate interface for the event it wants to process and/or extend one of the convenience base classes (or even the default event listeners used by Hibernate out-of-the-box as these are declared non-final for this purpose). Custom listeners can either be registered programmatically through the <literal>Configuration</literal> object, or specified in the Hibernate configuration XML (declarative configuration through the properties file is not supported). Here's an example of a custom load event listener:"
|
||||
msgstr "カスタムリスナは処理したいイベントについて適切なインターフェイスを実装するべきです。 便利な基底クラスのうちの一つを継承してもよいです (またはHibernateがデフォルトで使用するイベントリスナを継承してもよいです。 すばらしいことに、この目的のために非finalとして宣言されています)。 カスタムリスナは <literal>Configuration</literal> オブジェクトを使ってプログラムから登録するか、 HibernateのXML設定ファイルで指定できます (プロパティファイルで宣言的に設定する方法はサポートされていません)。 カスタムロードイベントリスナの例を示します。"
|
||||
|
||||
#: index.docbook:99
|
||||
#. Tag: para
|
||||
#: events.xml:63
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[public class MyLoadListener implements LoadEventListener {\n"
|
||||
" // this is the single method defined by the LoadEventListener interface\n"
|
||||
" public void onLoad(LoadEvent event, LoadEventListener.LoadType loadType)\n"
|
||||
" throws HibernateException {\n"
|
||||
" if ( !MySecurity.isAuthorized( event.getEntityClassName(), event.getEntityId() ) ) {\n"
|
||||
" throw MySecurityException(\"Unauthorized access\");\n"
|
||||
" }\n"
|
||||
" }\n"
|
||||
"}]]>"
|
||||
"If you have to react to particular events in your persistence layer, you may "
|
||||
"also use the Hibernate3 <emphasis>event</emphasis> architecture. The event "
|
||||
"system can be used in addition or as a replacement for interceptors."
|
||||
msgstr ""
|
||||
"<![CDATA[public class MyLoadListener implements LoadEventListener {
\n"
|
||||
" // this is the single method defined by the LoadEventListener interface
\n"
|
||||
" public void onLoad(LoadEvent event, LoadEventListener.LoadType loadType)
\n"
|
||||
" throws HibernateException {
\n"
|
||||
" if ( !MySecurity.isAuthorized( event.getEntityClassName(), event.getEntityId() ) ) {
\n"
|
||||
" throw MySecurityException(\"Unauthorized access\");
\n"
|
||||
" }
\n"
|
||||
" }
\n"
|
||||
"}]]>"
|
||||
"永続化層で特定のイベントに対応しなければならない場合、 Hibernate3の "
|
||||
"<emphasis>イベント</emphasis> アーキテクチャを使うこともできます。 イベントシ"
|
||||
"ステムはインターセプタと一緒に使うか、またはインターセプタの代わりとして使う"
|
||||
"ことができます。"
|
||||
|
||||
#: index.docbook:101
|
||||
msgid "You also need a configuration entry telling Hibernate to use the listener in addition to the default listener:"
|
||||
#. Tag: para
|
||||
#: events.xml:69
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Essentially all of the methods of the <literal>Session</literal> interface "
|
||||
"correlate to an event. You have a <literal>LoadEvent</literal>, a "
|
||||
"<literal>FlushEvent</literal>, etc (consult the XML configuration-file DTD "
|
||||
"or the <literal>org.hibernate.event</literal> package for the full list of "
|
||||
"defined event types). When a request is made of one of these methods, the "
|
||||
"Hibernate <literal>Session</literal> generates an appropriate event and "
|
||||
"passes it to the configured event listeners for that type. Out-of-the-box, "
|
||||
"these listeners implement the same processing in which those methods always "
|
||||
"resulted. However, you are free to implement a customization of one of the "
|
||||
"listener interfaces (i.e., the <literal>LoadEvent</literal> is processed by "
|
||||
"the registered implemenation of the <literal>LoadEventListener</literal> "
|
||||
"interface), in which case their implementation would be responsible for "
|
||||
"processing any <literal>load()</literal> requests made of the "
|
||||
"<literal>Session</literal>."
|
||||
msgstr ""
|
||||
"本質的に <literal>Session</literal> インターフェイスのすべてのメソッドは、 1"
|
||||
"個のイベントと相互に関連します。 例えば <literal>LoadEvent</literal>、"
|
||||
"<literal>FlushEvent</literal> などがあります (定義済みのイベント型の一覧につ"
|
||||
"いては、XML設定ファイルのDTDや <literal>org.hibernate.event</literal> パッ"
|
||||
"ケージを調べてください)。 リクエストがこれらのメソッドの1つから作られると"
|
||||
"き、 Hibernateの <literal>Session</literal> は適切なイベントを生成し、 そのイ"
|
||||
"ベント型に設定されたイベントリスナに渡します。 すばらしいことに、これらのリス"
|
||||
"ナはそのメソッドと同じ処理を実装します。 とはいえ、リスナインターフェイスの一"
|
||||
"つを自由にカスタム実装できます (つまり、<literal>LoadEvent</literal> は登録"
|
||||
"された <literal>LoadEventListener</literal> インターフェイスの実装により処理"
|
||||
"されます)。 その場合、その実装には <literal>Session</literal> から作られたど"
|
||||
"のような <literal>load()</literal> リクエストをも処理する責任があります。"
|
||||
|
||||
#. Tag: para
|
||||
#: events.xml:84
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"The listeners should be considered effectively singletons; meaning, they are "
|
||||
"shared between requests, and thus should not save any state as instance "
|
||||
"variables."
|
||||
msgstr ""
|
||||
"リスナは事実上シングルトンであると見なせます。 つまりリスナはリクエスト間で共"
|
||||
"有されるため、 インスタンス変数として状態を保持するべきではないということで"
|
||||
"す。"
|
||||
|
||||
#. Tag: para
|
||||
#: events.xml:89
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"A custom listener should implement the appropriate interface for the event "
|
||||
"it wants to process and/or extend one of the convenience base classes (or "
|
||||
"even the default event listeners used by Hibernate out-of-the-box as these "
|
||||
"are declared non-final for this purpose). Custom listeners can either be "
|
||||
"registered programmatically through the <literal>Configuration</literal> "
|
||||
"object, or specified in the Hibernate configuration XML (declarative "
|
||||
"configuration through the properties file is not supported). Here's an "
|
||||
"example of a custom load event listener:"
|
||||
msgstr ""
|
||||
"カスタムリスナは処理したいイベントについて適切なインターフェイスを実装するべ"
|
||||
"きです。 便利な基底クラスのうちの一つを継承してもよいです (またはHibernateが"
|
||||
"デフォルトで使用するイベントリスナを継承してもよいです。 すばらしいことに、こ"
|
||||
"の目的のために非finalとして宣言されています)。 カスタムリスナは "
|
||||
"<literal>Configuration</literal> オブジェクトを使ってプログラムから登録する"
|
||||
"か、 HibernateのXML設定ファイルで指定できます (プロパティファイルで宣言的に"
|
||||
"設定する方法はサポートされていません)。 カスタムロードイベントリスナの例を示"
|
||||
"します。"
|
||||
|
||||
#. Tag: programlisting
|
||||
#: events.xml:99
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[public class MyLoadListener implements LoadEventListener {\n"
|
||||
" // this is the single method defined by the LoadEventListener interface\n"
|
||||
" public void onLoad(LoadEvent event, LoadEventListener.LoadType "
|
||||
"loadType)\n"
|
||||
" throws HibernateException {\n"
|
||||
" if ( !MySecurity.isAuthorized( event.getEntityClassName(), event."
|
||||
"getEntityId() ) ) {\n"
|
||||
" throw MySecurityException(\"Unauthorized access\");\n"
|
||||
" }\n"
|
||||
" }\n"
|
||||
"}]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: para
|
||||
#: events.xml:101
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"You also need a configuration entry telling Hibernate to use the listener in "
|
||||
"addition to the default listener:"
|
||||
msgstr "デフォルトリスナ以外のリスナを使うには、Hibernateへの設定も必要です:"
|
||||
|
||||
#: index.docbook:106
|
||||
#. Tag: programlisting
|
||||
#: events.xml:106
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<hibernate-configuration>\n"
|
||||
" <session-factory>\n"
|
||||
" ...\n"
|
||||
" <event type=\"load\">\n"
|
||||
" <listener class=\"com.eg.MyLoadListener\"/>\n"
|
||||
" <listener class=\"org.hibernate.event.def.DefaultLoadEventListener\"/>\n"
|
||||
" </event>\n"
|
||||
" </session-factory>\n"
|
||||
"</hibernate-configuration>]]>"
|
||||
"<![CDATA[<hibernate-configuration>\n"
|
||||
" <session-factory>\n"
|
||||
" ...\n"
|
||||
" <event type=\"load\">\n"
|
||||
" <listener class=\"com.eg.MyLoadListener\"/>\n"
|
||||
" <listener class=\"org.hibernate.event.def."
|
||||
"DefaultLoadEventListener\"/>\n"
|
||||
" </event>\n"
|
||||
" </session-factory>\n"
|
||||
"</hibernate-configuration>]]>"
|
||||
msgstr ""
|
||||
"<![CDATA[<hibernate-configuration>
\n"
|
||||
" <session-factory>
\n"
|
||||
" ...
\n"
|
||||
" <event type=\"load\">
\n"
|
||||
" <listener class=\"com.eg.MyLoadListener\"/>
\n"
|
||||
" <listener class=\"org.hibernate.event.def.DefaultLoadEventListener\"/>
\n"
|
||||
" </event>
\n"
|
||||
" </session-factory>
\n"
|
||||
"</hibernate-configuration>]]>"
|
||||
|
||||
#: index.docbook:108
|
||||
#. Tag: para
|
||||
#: events.xml:108
|
||||
#, no-c-format
|
||||
msgid "Instead, you may register it programmatically:"
|
||||
msgstr "またその他に、プログラムで登録する方法もあります:"
|
||||
|
||||
#: index.docbook:112
|
||||
#. Tag: programlisting
|
||||
#: events.xml:112
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Configuration cfg = new Configuration();\n"
|
||||
"LoadEventListener[] stack = { new MyLoadListener(), new DefaultLoadEventListener() };\n"
|
||||
"cfg.EventListeners().setLoadEventListeners(stack);]]>"
|
||||
"<![CDATA[Configuration cfg = new Configuration();\n"
|
||||
"LoadEventListener[] stack = { new MyLoadListener(), new "
|
||||
"DefaultLoadEventListener() };\n"
|
||||
"cfg.EventListeners().setLoadEventListeners(stack);]]>"
|
||||
msgstr ""
|
||||
"<![CDATA[Configuration cfg = new Configuration();
\n"
|
||||
"LoadEventListener[] stack = { new MyLoadListener(), new DefaultLoadEventListener() };
\n"
|
||||
"cfg.EventListeners().setLoadEventListeners(stack);]]>"
|
||||
|
||||
#: index.docbook:114
|
||||
msgid "Listeners registered declaratively cannot share instances. If the same class name is used in multiple <literal><listener/></literal> elements, each reference will result in a separate instance of that class. If you need the capability to share listener instances between listener types you must use the programmatic registration approach."
|
||||
msgstr "リスナを宣言的に登録すると、そのリスナのインスタンスを共有できません。 複数の <literal><listener/></literal> 要素で同じクラス名が使われると、 それぞれの参照はそのクラスの別々のインスタンスを指すことになります。 リスナ型の間でリスナインスタンスを共有する必要があれば、 プログラムで登録する方法を採らなければなりません。"
|
||||
#. Tag: para
|
||||
#: events.xml:114
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Listeners registered declaratively cannot share instances. If the same class "
|
||||
"name is used in multiple <literal><listener/></literal> elements, each "
|
||||
"reference will result in a separate instance of that class. If you need the "
|
||||
"capability to share listener instances between listener types you must use "
|
||||
"the programmatic registration approach."
|
||||
msgstr ""
|
||||
"リスナを宣言的に登録すると、そのリスナのインスタンスを共有できません。 複数"
|
||||
"の <literal><listener/></literal> 要素で同じクラス名が使われると、 それ"
|
||||
"ぞれの参照はそのクラスの別々のインスタンスを指すことになります。 リスナ型の間"
|
||||
"でリスナインスタンスを共有する必要があれば、 プログラムで登録する方法を採らな"
|
||||
"ければなりません。"
|
||||
|
||||
#: index.docbook:122
|
||||
msgid "Why implement an interface and define the specific type during configuration? Well, a listener implementation could implement multiple event listener interfaces. Having the type additionally defined during registration makes it easier to turn custom listeners on or off during configuration."
|
||||
msgstr "なぜインターフェイスを実装して、特化した型を設定時に指定するのでしょうか? リスナの実装クラスに、複数のイベントリスナインターフェイスを実装できるからです。 登録時に追加で型を指定することで、カスタムリスナのon/offを設定時に簡単に切り替えられます。"
|
||||
#. Tag: para
|
||||
#: events.xml:122
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Why implement an interface and define the specific type during "
|
||||
"configuration? Well, a listener implementation could implement multiple "
|
||||
"event listener interfaces. Having the type additionally defined during "
|
||||
"registration makes it easier to turn custom listeners on or off during "
|
||||
"configuration."
|
||||
msgstr ""
|
||||
"なぜインターフェイスを実装して、特化した型を設定時に指定するのでしょうか? リ"
|
||||
"スナの実装クラスに、複数のイベントリスナインターフェイスを実装できるからで"
|
||||
"す。 登録時に追加で型を指定することで、カスタムリスナのon/offを設定時に簡単に"
|
||||
"切り替えられます。"
|
||||
|
||||
#: index.docbook:132
|
||||
#. Tag: title
|
||||
#: events.xml:132
|
||||
#, no-c-format
|
||||
msgid "Hibernate declarative security"
|
||||
msgstr "Hibernateの宣言的なセキュリティ"
|
||||
|
||||
#: index.docbook:133
|
||||
msgid "Usually, declarative security in Hibernate applications is managed in a session facade layer. Now, Hibernate3 allows certain actions to be permissioned via JACC, and authorized via JAAS. This is optional functionality built on top of the event architecture."
|
||||
msgstr "一般的にHibernateアプリケーションの宣言的なセキュリティは、セッションファサード層で管理します。 現在、Hiberenate3はJACCで許可しかつ、JAASで認証したアクションを許しています。 これはイベントアーキテクチャの最上位に組み込まれているオプションの機能です。"
|
||||
|
||||
#: index.docbook:139
|
||||
msgid "First, you must configure the appropriate event listeners, to enable the use of JAAS authorization."
|
||||
msgstr "まず最初に、適切なイベントリスナを設定してJAAS認証を使えるようにしなければなりません。"
|
||||
|
||||
#: index.docbook:144
|
||||
#. Tag: para
|
||||
#: events.xml:133
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<listener type=\"pre-delete\" class=\"org.hibernate.secure.JACCPreDeleteEventListener\"/>\n"
|
||||
"<listener type=\"pre-update\" class=\"org.hibernate.secure.JACCPreUpdateEventListener\"/>\n"
|
||||
"<listener type=\"pre-insert\" class=\"org.hibernate.secure.JACCPreInsertEventListener\"/>\n"
|
||||
"<listener type=\"pre-load\" class=\"org.hibernate.secure.JACCPreLoadEventListener\"/>]]>"
|
||||
"Usually, declarative security in Hibernate applications is managed in a "
|
||||
"session facade layer. Now, Hibernate3 allows certain actions to be "
|
||||
"permissioned via JACC, and authorized via JAAS. This is optional "
|
||||
"functionality built on top of the event architecture."
|
||||
msgstr ""
|
||||
"<![CDATA[<listener type=\"pre-delete\" class=\"org.hibernate.secure.JACCPreDeleteEventListener\"/>
\n"
|
||||
"<listener type=\"pre-update\" class=\"org.hibernate.secure.JACCPreUpdateEventListener\"/>
\n"
|
||||
"<listener type=\"pre-insert\" class=\"org.hibernate.secure.JACCPreInsertEventListener\"/>
\n"
|
||||
"<listener type=\"pre-load\" class=\"org.hibernate.secure.JACCPreLoadEventListener\"/>]]>"
|
||||
"一般的にHibernateアプリケーションの宣言的なセキュリティは、セッションファサー"
|
||||
"ド層で管理します。 現在、Hiberenate3はJACCで許可しかつ、JAASで認証したアク"
|
||||
"ションを許しています。 これはイベントアーキテクチャの最上位に組み込まれている"
|
||||
"オプションの機能です。"
|
||||
|
||||
#: index.docbook:146
|
||||
msgid "Note that <literal><listener type=\"...\" class=\"...\"/></literal> is just a shorthand for <literal><event type=\"...\"><listener class=\"...\"/></event></literal> when there is exactly one listener for a particular event type."
|
||||
msgstr "特定のイベント型に対してちょうど一つのリスナがあるとき、 <literal><listener type=\"...\" class=\"...\"/></literal> は <literal><event type=\"...\"><listener class=\"...\"/></event></literal> の簡略形に過ぎないことに注意してください。"
|
||||
|
||||
#: index.docbook:152
|
||||
msgid "Next, still in <literal>hibernate.cfg.xml</literal>, bind the permissions to roles:"
|
||||
msgstr "次に、同じく <literal>hibernate.cfg.xml</literal> でロールにパーミッションを与えてください:"
|
||||
|
||||
#: index.docbook:156
|
||||
#. Tag: para
|
||||
#: events.xml:139
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<grant role=\"admin\" entity-name=\"User\" actions=\"insert,update,read\"/>\n"
|
||||
"<grant role=\"su\" entity-name=\"User\" actions=\"*\"/>]]>"
|
||||
"First, you must configure the appropriate event listeners, to enable the use "
|
||||
"of JAAS authorization."
|
||||
msgstr ""
|
||||
"<![CDATA[<grant role=\"admin\" entity-name=\"User\" actions=\"insert,update,read\"/>
\n"
|
||||
"<grant role=\"su\" entity-name=\"User\" actions=\"*\"/>]]>"
|
||||
"まず最初に、適切なイベントリスナを設定してJAAS認証を使えるようにしなければな"
|
||||
"りません。"
|
||||
|
||||
#: index.docbook:158
|
||||
#. Tag: programlisting
|
||||
#: events.xml:144
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<listener type=\"pre-delete\" class=\"org.hibernate.secure."
|
||||
"JACCPreDeleteEventListener\"/>\n"
|
||||
"<listener type=\"pre-update\" class=\"org.hibernate.secure."
|
||||
"JACCPreUpdateEventListener\"/>\n"
|
||||
"<listener type=\"pre-insert\" class=\"org.hibernate.secure."
|
||||
"JACCPreInsertEventListener\"/>\n"
|
||||
"<listener type=\"pre-load\" class=\"org.hibernate.secure."
|
||||
"JACCPreLoadEventListener\"/>]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: para
|
||||
#: events.xml:146
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Note that <literal><listener type=\"...\" class=\"...\"/></literal> is "
|
||||
"just a shorthand for <literal><event type=\"...\"><listener class="
|
||||
"\"...\"/></event></literal> when there is exactly one listener for "
|
||||
"a particular event type."
|
||||
msgstr ""
|
||||
"特定のイベント型に対してちょうど一つのリスナがあるとき、 <literal><"
|
||||
"listener type=\"...\" class=\"...\"/></literal> は <literal><event "
|
||||
"type=\"...\"><listener class=\"...\"/></event></literal> の簡"
|
||||
"略形に過ぎないことに注意してください。"
|
||||
|
||||
#. Tag: para
|
||||
#: events.xml:152
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Next, still in <literal>hibernate.cfg.xml</literal>, bind the permissions to "
|
||||
"roles:"
|
||||
msgstr ""
|
||||
"次に、同じく <literal>hibernate.cfg.xml</literal> でロールにパーミッションを"
|
||||
"与えてください:"
|
||||
|
||||
#. Tag: programlisting
|
||||
#: events.xml:156
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<grant role=\"admin\" entity-name=\"User\" actions=\"insert,update,"
|
||||
"read\"/>\n"
|
||||
"<grant role=\"su\" entity-name=\"User\" actions=\"*\"/>]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: para
|
||||
#: events.xml:158
|
||||
#, no-c-format
|
||||
msgid "The role names are the roles understood by your JACC provider."
|
||||
msgstr "このロール名は使用するJACCプロバイダに理解されるロールです。"
|
||||
|
||||
msgid "ROLES_OF_TRANSLATORS"
|
||||
msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
|
||||
|
||||
msgid "CREDIT_FOR_TRANSLATORS"
|
||||
msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,351 +1,603 @@
|
|||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2007-10-25 07:47+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
#: index.docbook:5
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#. Tag: title
|
||||
#: example_parentchild.xml:5
|
||||
#, no-c-format
|
||||
msgid "Example: Parent/Child"
|
||||
msgstr "例:親/子供"
|
||||
|
||||
#: index.docbook:7
|
||||
msgid "One of the very first things that new users try to do with Hibernate is to model a parent / child type relationship. There are two different approaches to this. For various reasons the most convenient approach, especially for new users, is to model both <literal>Parent</literal> and <literal>Child</literal> as entity classes with a <literal><one-to-many></literal> association from <literal>Parent</literal> to <literal>Child</literal>. (The alternative approach is to declare the <literal>Child</literal> as a <literal><composite-element></literal>.) Now, it turns out that default semantics of a one to many association (in Hibernate) are much less close to the usual semantics of a parent / child relationship than those of a composite element mapping. We will explain how to use a <emphasis>bidirectional one to many association with cascades</emphasis> to model a parent / child relationship efficiently and elegantly. It's not at all difficult!"
|
||||
msgstr "新規ユーザがHibernateを使ってまず最初に扱うモデルの一つに、親子型のモデル化があります。 このモデル化には二つのアプローチが存在します。とりわけ新規ユーザにとって、 さまざまな理由から最も便利だと思われるアプローチは、<literal>親</literal> から <literal>子供</literal> への <literal><one-to-many></literal> 関連により <literal>親</literal> と <literal>子供</literal> の両方をエンティティクラスとしてモデリングする方法です (もう一つの方法は、<literal>子供</literal> を <literal><composite-element></literal> として定義するものです)。 これで(Hibernateにおける)一対多関連のデフォルトのセマンティクスが、通常の複合要素のマッピングよりも、 親子関係のセマンティクスから遠いことがわかります。 それでは親子関係を効率的かつエレガントにモデリングするために、 <emphasis>カスケード操作を使った双方向一対多関連</emphasis> の扱い方を説明します。これはまったく難しいものではありません。"
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:7
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"One of the very first things that new users try to do with Hibernate is to "
|
||||
"model a parent / child type relationship. There are two different approaches "
|
||||
"to this. For various reasons the most convenient approach, especially for "
|
||||
"new users, is to model both <literal>Parent</literal> and <literal>Child</"
|
||||
"literal> as entity classes with a <literal><one-to-many></literal> "
|
||||
"association from <literal>Parent</literal> to <literal>Child</literal>. (The "
|
||||
"alternative approach is to declare the <literal>Child</literal> as a "
|
||||
"<literal><composite-element></literal>.) Now, it turns out that "
|
||||
"default semantics of a one to many association (in Hibernate) are much less "
|
||||
"close to the usual semantics of a parent / child relationship than those of "
|
||||
"a composite element mapping. We will explain how to use a "
|
||||
"<emphasis>bidirectional one to many association with cascades</emphasis> to "
|
||||
"model a parent / child relationship efficiently and elegantly. It's not at "
|
||||
"all difficult!"
|
||||
msgstr ""
|
||||
"新規ユーザがHibernateを使ってまず最初に扱うモデルの一つに、親子型のモデル化が"
|
||||
"あります。 このモデル化には二つのアプローチが存在します。とりわけ新規ユーザに"
|
||||
"とって、 さまざまな理由から最も便利だと思われるアプローチは、<literal>親</"
|
||||
"literal> から <literal>子供</literal> への <literal><one-to-many></"
|
||||
"literal> 関連により <literal>親</literal> と <literal>子供</literal> の両方を"
|
||||
"エンティティクラスとしてモデリングする方法です (もう一つの方法は、<literal>"
|
||||
"子供</literal> を <literal><composite-element></literal> として定義する"
|
||||
"ものです)。 これで(Hibernateにおける)一対多関連のデフォルトのセマンティク"
|
||||
"スが、通常の複合要素のマッピングよりも、 親子関係のセマンティクスから遠いこと"
|
||||
"がわかります。 それでは親子関係を効率的かつエレガントにモデリングするため"
|
||||
"に、 <emphasis>カスケード操作を使った双方向一対多関連</emphasis> の扱い方を説"
|
||||
"明します。これはまったく難しいものではありません。"
|
||||
|
||||
#: index.docbook:21
|
||||
#. Tag: title
|
||||
#: example_parentchild.xml:21
|
||||
#, no-c-format
|
||||
msgid "A note about collections"
|
||||
msgstr "コレクションに関する注意"
|
||||
|
||||
#: index.docbook:23
|
||||
msgid "Hibernate collections are considered to be a logical part of their owning entity; never of the contained entities. This is a crucial distinction! It has the following consequences:"
|
||||
msgstr "Hibernateのコレクションは自身のエンティティの論理的な部分と考えられ、 決して包含するエンティティのものではありません。これは致命的な違いです! これは以下のような結果になります:"
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:23
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Hibernate collections are considered to be a logical part of their owning "
|
||||
"entity; never of the contained entities. This is a crucial distinction! It "
|
||||
"has the following consequences:"
|
||||
msgstr ""
|
||||
"Hibernateのコレクションは自身のエンティティの論理的な部分と考えられ、 決して"
|
||||
"包含するエンティティのものではありません。これは致命的な違いです! これは以下"
|
||||
"のような結果になります:"
|
||||
|
||||
#: index.docbook:30
|
||||
msgid "When we remove / add an object from / to a collection, the version number of the collection owner is incremented."
|
||||
msgstr "オブジェクトをコレクションから削除、またはコレクションに追加するとき、 コレクションのオーナーのバージョン番号はインクリメントされます。"
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:30
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"When we remove / add an object from / to a collection, the version number of "
|
||||
"the collection owner is incremented."
|
||||
msgstr ""
|
||||
"オブジェクトをコレクションから削除、またはコレクションに追加するとき、 コレク"
|
||||
"ションのオーナーのバージョン番号はインクリメントされます。"
|
||||
|
||||
#: index.docbook:36
|
||||
msgid "If an object that was removed from a collection is an instance of a value type (eg, a composite element), that object will cease to be persistent and its state will be completely removed from the database. Likewise, adding a value type instance to the collection will cause its state to be immediately persistent."
|
||||
msgstr "もしコレクションから削除されたオブジェクトが値型のインスタンス (例えばコンポジットエレメント)だったならば、そのオブジェクトは永続的ではなくなり、 その状態はデータベースから完全に削除されます。 同じように、値型のインスタンスをコレクションに追加すると、その状態はすぐに永続的になります。"
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:36
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"If an object that was removed from a collection is an instance of a value "
|
||||
"type (eg, a composite element), that object will cease to be persistent and "
|
||||
"its state will be completely removed from the database. Likewise, adding a "
|
||||
"value type instance to the collection will cause its state to be immediately "
|
||||
"persistent."
|
||||
msgstr ""
|
||||
"もしコレクションから削除されたオブジェクトが値型のインスタンス (例えばコンポ"
|
||||
"ジットエレメント)だったならば、そのオブジェクトは永続的ではなくなり、 その状"
|
||||
"態はデータベースから完全に削除されます。 同じように、値型のインスタンスをコレ"
|
||||
"クションに追加すると、その状態はすぐに永続的になります。"
|
||||
|
||||
#: index.docbook:44
|
||||
msgid "On the other hand, if an entity is removed from a collection (a one-to-many or many-to-many association), it will not be deleted, by default. This behaviour is completely consistent - a change to the internal state of another entity should not cause the associated entity to vanish! Likewise, adding an entity to a collection does not cause that entity to become persistent, by default."
|
||||
msgstr "一方、もしエンティティがコレクション(一対多または多対多関連)から削除されても、 デフォルトではそれは削除されません。この動作は完全に一貫しています。 すなわち、他のエンティティの内部状態を変更しても、関連するエンティティが消滅すべきではないということです。 同様に、エンティティがコレクションに追加されても、デフォルトではそのエンティティは永続的にはなりません。"
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:44
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"On the other hand, if an entity is removed from a collection (a one-to-many "
|
||||
"or many-to-many association), it will not be deleted, by default. This "
|
||||
"behaviour is completely consistent - a change to the internal state of "
|
||||
"another entity should not cause the associated entity to vanish! Likewise, "
|
||||
"adding an entity to a collection does not cause that entity to become "
|
||||
"persistent, by default."
|
||||
msgstr ""
|
||||
"一方、もしエンティティがコレクション(一対多または多対多関連)から削除されて"
|
||||
"も、 デフォルトではそれは削除されません。この動作は完全に一貫しています。 す"
|
||||
"なわち、他のエンティティの内部状態を変更しても、関連するエンティティが消滅す"
|
||||
"べきではないということです。 同様に、エンティティがコレクションに追加されて"
|
||||
"も、デフォルトではそのエンティティは永続的にはなりません。"
|
||||
|
||||
#: index.docbook:54
|
||||
msgid "Instead, the default behaviour is that adding an entity to a collection merely creates a link between the two entities, while removing it removes the link. This is very appropriate for all sorts of cases. Where it is not appropriate at all is the case of a parent / child relationship, where the life of the child is bound to the life cycle of the parent."
|
||||
msgstr "その代わりに、デフォルトの動作では、エンティティをコレクションに追加すると単に二つのエンティティ間のリンクを作成し、 一方エンティティを削除するとリンクも削除します。これはすべてのケースにおいて非常に適切です。 これが適切でないのは親/子関係の場合です。この場合子供の生存は親のライフサイクルに制限されるからです。"
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:54
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Instead, the default behaviour is that adding an entity to a collection "
|
||||
"merely creates a link between the two entities, while removing it removes "
|
||||
"the link. This is very appropriate for all sorts of cases. Where it is not "
|
||||
"appropriate at all is the case of a parent / child relationship, where the "
|
||||
"life of the child is bound to the life cycle of the parent."
|
||||
msgstr ""
|
||||
"その代わりに、デフォルトの動作では、エンティティをコレクションに追加すると単"
|
||||
"に二つのエンティティ間のリンクを作成し、 一方エンティティを削除するとリンクも"
|
||||
"削除します。これはすべてのケースにおいて非常に適切です。 これが適切でないのは"
|
||||
"親/子関係の場合です。この場合子供の生存は親のライフサイクルに制限されるからで"
|
||||
"す。"
|
||||
|
||||
#: index.docbook:64
|
||||
#. Tag: title
|
||||
#: example_parentchild.xml:64
|
||||
#, no-c-format
|
||||
msgid "Bidirectional one-to-many"
|
||||
msgstr "双方向一対多"
|
||||
|
||||
#: index.docbook:66
|
||||
msgid "Suppose we start with a simple <literal><one-to-many></literal> association from <literal>Parent</literal> to <literal>Child</literal>."
|
||||
msgstr "<literal>Parent</literal> から <literal>Child</literal> への単純な <literal><one-to-many></literal> 関連から始めるとします。"
|
||||
|
||||
#: index.docbook:71
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:66
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<set name=\"children\">\n"
|
||||
" <key column=\"parent_id\"/>\n"
|
||||
" <one-to-many class=\"Child\"/>\n"
|
||||
"</set>]]>"
|
||||
"Suppose we start with a simple <literal><one-to-many></literal> "
|
||||
"association from <literal>Parent</literal> to <literal>Child</literal>."
|
||||
msgstr ""
|
||||
"<![CDATA[<set name=\"children\">
\n"
|
||||
" <key column=\"parent_id\"/>
\n"
|
||||
" <one-to-many class=\"Child\"/>
\n"
|
||||
"</set>]]>"
|
||||
"<literal>Parent</literal> から <literal>Child</literal> への単純な "
|
||||
"<literal><one-to-many></literal> 関連から始めるとします。"
|
||||
|
||||
#: index.docbook:73
|
||||
#. Tag: programlisting
|
||||
#: example_parentchild.xml:71
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<set name=\"children\">\n"
|
||||
" <key column=\"parent_id\"/>\n"
|
||||
" <one-to-many class=\"Child\"/>\n"
|
||||
"</set>]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:73
|
||||
#, no-c-format
|
||||
msgid "If we were to execute the following code"
|
||||
msgstr "以下のコードを実行すると、"
|
||||
|
||||
#: index.docbook:77
|
||||
#. Tag: programlisting
|
||||
#: example_parentchild.xml:77
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Parent p = .....;\n"
|
||||
"Child c = new Child();\n"
|
||||
"p.getChildren().add(c);\n"
|
||||
"session.save(c);\n"
|
||||
"session.flush();]]>"
|
||||
"<![CDATA[Parent p = .....;\n"
|
||||
"Child c = new Child();\n"
|
||||
"p.getChildren().add(c);\n"
|
||||
"session.save(c);\n"
|
||||
"session.flush();]]>"
|
||||
msgstr ""
|
||||
"<![CDATA[Parent p = .....;
\n"
|
||||
"Child c = new Child();
\n"
|
||||
"p.getChildren().add(c);
\n"
|
||||
"session.save(c);
\n"
|
||||
"session.flush();]]>"
|
||||
|
||||
#: index.docbook:79
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:79
|
||||
#, no-c-format
|
||||
msgid "Hibernate would issue two SQL statements:"
|
||||
msgstr "Hibernateは二つのSQL文を発行します:"
|
||||
|
||||
#: index.docbook:85
|
||||
msgid "an <literal>INSERT</literal> to create the record for <literal>c</literal>"
|
||||
msgstr "<literal>c</literal>に対するレコードを生成する<literal>INSERT</literal>"
|
||||
|
||||
#: index.docbook:88
|
||||
msgid "an <literal>UPDATE</literal> to create the link from <literal>p</literal> to <literal>c</literal>"
|
||||
msgstr "<literal>p</literal>から<literal>c</literal>へのリンクを作成する<literal>UPDATE</literal>"
|
||||
|
||||
#: index.docbook:95
|
||||
msgid "This is not only inefficient, but also violates any <literal>NOT NULL</literal> constraint on the <literal>parent_id</literal> column. We can fix the nullability constraint violation by specifying <literal>not-null=\"true\"</literal> in the collection mapping:"
|
||||
msgstr "これは非効率的なだけではなく、<literal>parent_id</literal> カラムにおいて <literal>NOT NULL</literal> 制約に違反します。 コレクションのマッピングで <literal>not-null=\"true\"</literal> と指定することで、null制約違反を解決することができます:"
|
||||
|
||||
#: index.docbook:101
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:85
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<set name=\"children\">\n"
|
||||
" <key column=\"parent_id\" not-null=\"true\"/>\n"
|
||||
" <one-to-many class=\"Child\"/>\n"
|
||||
"</set>]]>"
|
||||
"an <literal>INSERT</literal> to create the record for <literal>c</literal>"
|
||||
msgstr ""
|
||||
"<![CDATA[<set name=\"children\">
\n"
|
||||
" <key column=\"parent_id\" not-null=\"true\"/>
\n"
|
||||
" <one-to-many class=\"Child\"/>
\n"
|
||||
"</set>]]>"
|
||||
"<literal>c</literal>に対するレコードを生成する<literal>INSERT</literal>"
|
||||
|
||||
#: index.docbook:103
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:88
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"an <literal>UPDATE</literal> to create the link from <literal>p</literal> to "
|
||||
"<literal>c</literal>"
|
||||
msgstr ""
|
||||
"<literal>p</literal>から<literal>c</literal>へのリンクを作成する"
|
||||
"<literal>UPDATE</literal>"
|
||||
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:95
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"This is not only inefficient, but also violates any <literal>NOT NULL</"
|
||||
"literal> constraint on the <literal>parent_id</literal> column. We can fix "
|
||||
"the nullability constraint violation by specifying <literal>not-null=\"true"
|
||||
"\"</literal> in the collection mapping:"
|
||||
msgstr ""
|
||||
"これは非効率的なだけではなく、<literal>parent_id</literal> カラムにおいて "
|
||||
"<literal>NOT NULL</literal> 制約に違反します。 コレクションのマッピングで "
|
||||
"<literal>not-null=\"true\"</literal> と指定することで、null制約違反を解決する"
|
||||
"ことができます:"
|
||||
|
||||
#. Tag: programlisting
|
||||
#: example_parentchild.xml:101
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<set name=\"children\">\n"
|
||||
" <key column=\"parent_id\" not-null=\"true\"/>\n"
|
||||
" <one-to-many class=\"Child\"/>\n"
|
||||
"</set>]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:103
|
||||
#, no-c-format
|
||||
msgid "However, this is not the recommended solution."
|
||||
msgstr "しかしこの解決策は推奨できません。"
|
||||
|
||||
#: index.docbook:106
|
||||
msgid "The underlying cause of this behaviour is that the link (the foreign key <literal>parent_id</literal>) from <literal>p</literal> to <literal>c</literal> is not considered part of the state of the <literal>Child</literal> object and is therefore not created in the <literal>INSERT</literal>. So the solution is to make the link part of the <literal>Child</literal> mapping."
|
||||
msgstr "この動作の根本的な原因は、<literal>p</literal> から <literal>c</literal> へのリンク (外部キー <literal>parent_id</literal>)は <literal>Child</literal> オブジェクトの状態の一部とは考えられず、 そのため <literal>INSERT</literal> によってリンクが生成されないことです。 ですから、解決策はリンクをChildマッピングの一部にすることです。"
|
||||
|
||||
#: index.docbook:113
|
||||
msgid "<![CDATA[<many-to-one name=\"parent\" column=\"parent_id\" not-null=\"true\"/>]]>"
|
||||
msgstr "<![CDATA[<many-to-one name=\"parent\" column=\"parent_id\" not-null=\"true\"/>]]>"
|
||||
|
||||
#: index.docbook:115
|
||||
msgid "(We also need to add the <literal>parent</literal> property to the <literal>Child</literal> class.)"
|
||||
msgstr "(また <literal>Child</literal> クラスに <literal>parent</literal> プロパティを追加する必要があります。)"
|
||||
|
||||
#: index.docbook:119
|
||||
msgid "Now that the <literal>Child</literal> entity is managing the state of the link, we tell the collection not to update the link. We use the <literal>inverse</literal> attribute."
|
||||
msgstr "それでは <literal>Child</literal> エンティティがリンクの状態を制御するようになったので、 コレクションがリンクを更新しないようにしましょう。それには <literal>inverse</literal> 属性を使います。"
|
||||
|
||||
#: index.docbook:124
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:106
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<set name=\"children\" inverse=\"true\">\n"
|
||||
" <key column=\"parent_id\"/>\n"
|
||||
" <one-to-many class=\"Child\"/>\n"
|
||||
"</set>]]>"
|
||||
"The underlying cause of this behaviour is that the link (the foreign key "
|
||||
"<literal>parent_id</literal>) from <literal>p</literal> to <literal>c</"
|
||||
"literal> is not considered part of the state of the <literal>Child</literal> "
|
||||
"object and is therefore not created in the <literal>INSERT</literal>. So the "
|
||||
"solution is to make the link part of the <literal>Child</literal> mapping."
|
||||
msgstr ""
|
||||
"<![CDATA[<set name=\"children\" inverse=\"true\">
\n"
|
||||
" <key column=\"parent_id\"/>
\n"
|
||||
" <one-to-many class=\"Child\"/>
\n"
|
||||
"</set>]]>"
|
||||
"この動作の根本的な原因は、<literal>p</literal> から <literal>c</literal> への"
|
||||
"リンク (外部キー <literal>parent_id</literal>)は <literal>Child</literal> オ"
|
||||
"ブジェクトの状態の一部とは考えられず、 そのため <literal>INSERT</literal> に"
|
||||
"よってリンクが生成されないことです。 ですから、解決策はリンクをChildマッピン"
|
||||
"グの一部にすることです。"
|
||||
|
||||
#: index.docbook:126
|
||||
#. Tag: programlisting
|
||||
#: example_parentchild.xml:113
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<many-to-one name=\"parent\" column=\"parent_id\" not-null=\"true\"/"
|
||||
">]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:115
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"(We also need to add the <literal>parent</literal> property to the "
|
||||
"<literal>Child</literal> class.)"
|
||||
msgstr ""
|
||||
"(また <literal>Child</literal> クラスに <literal>parent</literal> プロパティ"
|
||||
"を追加する必要があります。)"
|
||||
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:119
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Now that the <literal>Child</literal> entity is managing the state of the "
|
||||
"link, we tell the collection not to update the link. We use the "
|
||||
"<literal>inverse</literal> attribute."
|
||||
msgstr ""
|
||||
"それでは <literal>Child</literal> エンティティがリンクの状態を制御するように"
|
||||
"なったので、 コレクションがリンクを更新しないようにしましょう。それには "
|
||||
"<literal>inverse</literal> 属性を使います。"
|
||||
|
||||
#. Tag: programlisting
|
||||
#: example_parentchild.xml:124
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<set name=\"children\" inverse=\"true\">\n"
|
||||
" <key column=\"parent_id\"/>\n"
|
||||
" <one-to-many class=\"Child\"/>\n"
|
||||
"</set>]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:126
|
||||
#, no-c-format
|
||||
msgid "The following code would be used to add a new <literal>Child</literal>"
|
||||
msgstr "以下のコードを使えば、新しい <literal>Child</literal> を追加することができます。"
|
||||
|
||||
#: index.docbook:130
|
||||
msgid ""
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
|
||||
"Child c = new Child();\n"
|
||||
"c.setParent(p);\n"
|
||||
"p.getChildren().add(c);\n"
|
||||
"session.save(c);\n"
|
||||
"session.flush();]]>"
|
||||
msgstr ""
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
\n"
|
||||
"Child c = new Child();
\n"
|
||||
"c.setParent(p);
\n"
|
||||
"p.getChildren().add(c);
\n"
|
||||
"session.save(c);
\n"
|
||||
"session.flush();]]>"
|
||||
"以下のコードを使えば、新しい <literal>Child</literal> を追加することができま"
|
||||
"す。"
|
||||
|
||||
#: index.docbook:132
|
||||
#. Tag: programlisting
|
||||
#: example_parentchild.xml:130
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
|
||||
"Child c = new Child();\n"
|
||||
"c.setParent(p);\n"
|
||||
"p.getChildren().add(c);\n"
|
||||
"session.save(c);\n"
|
||||
"session.flush();]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:132
|
||||
#, no-c-format
|
||||
msgid "And now, only one SQL <literal>INSERT</literal> would be issued!"
|
||||
msgstr "これにより、SQLの <literal>INSERT</literal> 文が一つだけが発行されるようになりました!"
|
||||
|
||||
#: index.docbook:136
|
||||
msgid "To tighten things up a bit, we could create an <literal>addChild()</literal> method of <literal>Parent</literal>."
|
||||
msgstr "もう少し強化するには、<literal>Parent</literal> の <literal>addChild()</literal> メソッドを作成します。"
|
||||
|
||||
#: index.docbook:141
|
||||
msgid ""
|
||||
"<![CDATA[public void addChild(Child c) {\n"
|
||||
" c.setParent(this);\n"
|
||||
" children.add(c);\n"
|
||||
"}]]>"
|
||||
msgstr ""
|
||||
"<![CDATA[public void addChild(Child c) {
\n"
|
||||
" c.setParent(this);
\n"
|
||||
" children.add(c);
\n"
|
||||
"}]]>"
|
||||
"これにより、SQLの <literal>INSERT</literal> 文が一つだけが発行されるようにな"
|
||||
"りました!"
|
||||
|
||||
#: index.docbook:143
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:136
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"To tighten things up a bit, we could create an <literal>addChild()</literal> "
|
||||
"method of <literal>Parent</literal>."
|
||||
msgstr ""
|
||||
"もう少し強化するには、<literal>Parent</literal> の <literal>addChild()</"
|
||||
"literal> メソッドを作成します。"
|
||||
|
||||
#. Tag: programlisting
|
||||
#: example_parentchild.xml:141
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[public void addChild(Child c) {\n"
|
||||
" c.setParent(this);\n"
|
||||
" children.add(c);\n"
|
||||
"}]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:143
|
||||
#, no-c-format
|
||||
msgid "Now, the code to add a <literal>Child</literal> looks like"
|
||||
msgstr "<literal>Child</literal> を追加するコードはこのようになります。"
|
||||
|
||||
#: index.docbook:147
|
||||
#. Tag: programlisting
|
||||
#: example_parentchild.xml:147
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
|
||||
"Child c = new Child();\n"
|
||||
"p.addChild(c);\n"
|
||||
"session.save(c);\n"
|
||||
"session.flush();]]>"
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
|
||||
"Child c = new Child();\n"
|
||||
"p.addChild(c);\n"
|
||||
"session.save(c);\n"
|
||||
"session.flush();]]>"
|
||||
msgstr ""
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
\n"
|
||||
"Child c = new Child();
\n"
|
||||
"p.addChild(c);
\n"
|
||||
"session.save(c);
\n"
|
||||
"session.flush();]]>"
|
||||
|
||||
#: index.docbook:152
|
||||
#. Tag: title
|
||||
#: example_parentchild.xml:152
|
||||
#, no-c-format
|
||||
msgid "Cascading life cycle"
|
||||
msgstr "ライフサイクルのカスケード"
|
||||
|
||||
#: index.docbook:154
|
||||
msgid "The explicit call to <literal>save()</literal> is still annoying. We will address this by using cascades."
|
||||
msgstr "明示的に <literal>save()</literal> をコールするのはまだ煩わしいものです。これをカスケードを使って対処します。"
|
||||
|
||||
#: index.docbook:159
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:154
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all\">\n"
|
||||
" <key column=\"parent_id\"/>\n"
|
||||
" <one-to-many class=\"Child\"/>\n"
|
||||
"</set>]]>"
|
||||
"The explicit call to <literal>save()</literal> is still annoying. We will "
|
||||
"address this by using cascades."
|
||||
msgstr ""
|
||||
"<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all\">
\n"
|
||||
" <key column=\"parent_id\"/>
\n"
|
||||
" <one-to-many class=\"Child\"/>
\n"
|
||||
"</set>]]>"
|
||||
"明示的に <literal>save()</literal> をコールするのはまだ煩わしいものです。これ"
|
||||
"をカスケードを使って対処します。"
|
||||
|
||||
#: index.docbook:161
|
||||
#. Tag: programlisting
|
||||
#: example_parentchild.xml:159
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all\">\n"
|
||||
" <key column=\"parent_id\"/>\n"
|
||||
" <one-to-many class=\"Child\"/>\n"
|
||||
"</set>]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:161
|
||||
#, no-c-format
|
||||
msgid "This simplifies the code above to"
|
||||
msgstr "これにより先ほどのコードをこのように単純化します"
|
||||
|
||||
#: index.docbook:165
|
||||
#. Tag: programlisting
|
||||
#: example_parentchild.xml:165
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
|
||||
"Child c = new Child();\n"
|
||||
"p.addChild(c);\n"
|
||||
"session.flush();]]>"
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
|
||||
"Child c = new Child();\n"
|
||||
"p.addChild(c);\n"
|
||||
"session.flush();]]>"
|
||||
msgstr ""
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
\n"
|
||||
"Child c = new Child();
\n"
|
||||
"p.addChild(c);
\n"
|
||||
"session.flush();]]>"
|
||||
|
||||
#: index.docbook:167
|
||||
msgid "Similarly, we don't need to iterate over the children when saving or deleting a <literal>Parent</literal>. The following removes <literal>p</literal> and all its children from the database."
|
||||
msgstr "同様に <literal>Parent</literal> を保存または削除するときに、子供を一つ一つ取り出して扱う必要はありません。 以下のコードは <literal>p</literal> を削除し、そしてデータベースからその子供をすべて削除します。"
|
||||
|
||||
#: index.docbook:172
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:167
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
|
||||
"session.delete(p);\n"
|
||||
"session.flush();]]>"
|
||||
"Similarly, we don't need to iterate over the children when saving or "
|
||||
"deleting a <literal>Parent</literal>. The following removes <literal>p</"
|
||||
"literal> and all its children from the database."
|
||||
msgstr ""
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
\n"
|
||||
"session.delete(p);
\n"
|
||||
"session.flush();]]>"
|
||||
"同様に <literal>Parent</literal> を保存または削除するときに、子供を一つ一つ取"
|
||||
"り出して扱う必要はありません。 以下のコードは <literal>p</literal> を削除し、"
|
||||
"そしてデータベースからその子供をすべて削除します。"
|
||||
|
||||
#: index.docbook:174
|
||||
#. Tag: programlisting
|
||||
#: example_parentchild.xml:172
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
|
||||
"session.delete(p);\n"
|
||||
"session.flush();]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:174
|
||||
#, no-c-format
|
||||
msgid "However, this code"
|
||||
msgstr "しかしこのコードは"
|
||||
|
||||
#: index.docbook:178
|
||||
#. Tag: programlisting
|
||||
#: example_parentchild.xml:178
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
|
||||
"Child c = (Child) p.getChildren().iterator().next();\n"
|
||||
"p.getChildren().remove(c);\n"
|
||||
"c.setParent(null);\n"
|
||||
"session.flush();]]>"
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
|
||||
"Child c = (Child) p.getChildren().iterator().next();\n"
|
||||
"p.getChildren().remove(c);\n"
|
||||
"c.setParent(null);\n"
|
||||
"session.flush();]]>"
|
||||
msgstr ""
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
\n"
|
||||
"Child c = (Child) p.getChildren().iterator().next();
\n"
|
||||
"p.getChildren().remove(c);
\n"
|
||||
"c.setParent(null);
\n"
|
||||
"session.flush();]]>"
|
||||
|
||||
#: index.docbook:180
|
||||
msgid "will not remove <literal>c</literal> from the database; it will ony remove the link to <literal>p</literal> (and cause a <literal>NOT NULL</literal> constraint violation, in this case). You need to explicitly <literal>delete()</literal> the <literal>Child</literal>."
|
||||
msgstr "データベースから <literal>c</literal> を削除しません。<literal>p</literal> へのリンクを削除する (そしてこのケースでは <literal>NOT NULL</literal> 制約違反を引き起こす)だけです。 <literal>Child</literal> の <literal>delete()</literal> を明示する必要があります。"
|
||||
|
||||
#: index.docbook:186
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:180
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
|
||||
"Child c = (Child) p.getChildren().iterator().next();\n"
|
||||
"p.getChildren().remove(c);\n"
|
||||
"session.delete(c);\n"
|
||||
"session.flush();]]>"
|
||||
"will not remove <literal>c</literal> from the database; it will ony remove "
|
||||
"the link to <literal>p</literal> (and cause a <literal>NOT NULL</literal> "
|
||||
"constraint violation, in this case). You need to explicitly <literal>delete()"
|
||||
"</literal> the <literal>Child</literal>."
|
||||
msgstr ""
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
\n"
|
||||
"Child c = (Child) p.getChildren().iterator().next();
\n"
|
||||
"p.getChildren().remove(c);
\n"
|
||||
"session.delete(c);
\n"
|
||||
"session.flush();]]>"
|
||||
"データベースから <literal>c</literal> を削除しません。<literal>p</literal> へ"
|
||||
"のリンクを削除する (そしてこのケースでは <literal>NOT NULL</literal> 制約違"
|
||||
"反を引き起こす)だけです。 <literal>Child</literal> の <literal>delete()</"
|
||||
"literal> を明示する必要があります。"
|
||||
|
||||
#: index.docbook:188
|
||||
msgid "Now, in our case, a <literal>Child</literal> can't really exist without its parent. So if we remove a <literal>Child</literal> from the collection, we really do want it to be deleted. For this, we must use <literal>cascade=\"all-delete-orphan\"</literal>."
|
||||
msgstr "今このケースでは実際に <literal>Child</literal> が親なしでは存在できないようになりました。 そのため、もしコレクションから <literal>Child</literal> を取り除く場合、これも削除したいです。 そのためには <literal>cascade=\"all-delete-orphan\"</literal> を使わなければなりません。"
|
||||
|
||||
#: index.docbook:194
|
||||
#. Tag: programlisting
|
||||
#: example_parentchild.xml:186
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all-delete-orphan\">\n"
|
||||
" <key column=\"parent_id\"/>\n"
|
||||
" <one-to-many class=\"Child\"/>\n"
|
||||
"</set>]]>"
|
||||
"<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
|
||||
"Child c = (Child) p.getChildren().iterator().next();\n"
|
||||
"p.getChildren().remove(c);\n"
|
||||
"session.delete(c);\n"
|
||||
"session.flush();]]>"
|
||||
msgstr ""
|
||||
"<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all-delete-orphan\">
\n"
|
||||
" <key column=\"parent_id\"/>
\n"
|
||||
" <one-to-many class=\"Child\"/>
\n"
|
||||
"</set>]]>"
|
||||
|
||||
#: index.docbook:196
|
||||
msgid "Note: even though the collection mapping specifies <literal>inverse=\"true\"</literal>, cascades are still processed by iterating the collection elements. So if you require that an object be saved, deleted or updated by cascade, you must add it to the collection. It is not enough to simply call <literal>setParent()</literal>."
|
||||
msgstr "注意:コレクションのマッピングで <literal>inverse=\"true\"</literal> と指定しても、 コレクションの要素のイテレーションによって、依然カスケードが実行されます。 そのためもしカスケードでオブジェクトをセーブ、削除、更新する必要があるなら、 それをコレクションに追加しなければなりません。単に <literal>setParent()</literal> を呼ぶだけでは不十分です。"
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:188
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Now, in our case, a <literal>Child</literal> can't really exist without its "
|
||||
"parent. So if we remove a <literal>Child</literal> from the collection, we "
|
||||
"really do want it to be deleted. For this, we must use <literal>cascade="
|
||||
"\"all-delete-orphan\"</literal>."
|
||||
msgstr ""
|
||||
"今このケースでは実際に <literal>Child</literal> が親なしでは存在できないよう"
|
||||
"になりました。 そのため、もしコレクションから <literal>Child</literal> を取り"
|
||||
"除く場合、これも削除したいです。 そのためには <literal>cascade=\"all-delete-"
|
||||
"orphan\"</literal> を使わなければなりません。"
|
||||
|
||||
#: index.docbook:206
|
||||
#. Tag: programlisting
|
||||
#: example_parentchild.xml:194
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all-delete-orphan"
|
||||
"\">\n"
|
||||
" <key column=\"parent_id\"/>\n"
|
||||
" <one-to-many class=\"Child\"/>\n"
|
||||
"</set>]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:196
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Note: even though the collection mapping specifies <literal>inverse=\"true"
|
||||
"\"</literal>, cascades are still processed by iterating the collection "
|
||||
"elements. So if you require that an object be saved, deleted or updated by "
|
||||
"cascade, you must add it to the collection. It is not enough to simply call "
|
||||
"<literal>setParent()</literal>."
|
||||
msgstr ""
|
||||
"注意:コレクションのマッピングで <literal>inverse=\"true\"</literal> と指定し"
|
||||
"ても、 コレクションの要素のイテレーションによって、依然カスケードが実行されま"
|
||||
"す。 そのためもしカスケードでオブジェクトをセーブ、削除、更新する必要があるな"
|
||||
"ら、 それをコレクションに追加しなければなりません。単に <literal>setParent()"
|
||||
"</literal> を呼ぶだけでは不十分です。"
|
||||
|
||||
#. Tag: title
|
||||
#: example_parentchild.xml:206
|
||||
#, no-c-format
|
||||
msgid "Cascades and <literal>unsaved-value</literal>"
|
||||
msgstr "カスケードと <literal>unsaved-value</literal>"
|
||||
|
||||
#: index.docbook:208
|
||||
msgid "Suppose we loaded up a <literal>Parent</literal> in one <literal>Session</literal>, made some changes in a UI action and wish to persist these changes in a new session by calling <literal>update()</literal>. The <literal>Parent</literal> will contain a collection of childen and, since cascading update is enabled, Hibernate needs to know which children are newly instantiated and which represent existing rows in the database. Lets assume that both <literal>Parent</literal> and <literal>Child</literal> have genenerated identifier properties of type <literal>Long</literal>. Hibernate will use the identifier and version/timestamp property value to determine which of the children are new. (See <xref linkend=\"objectstate-saveorupdate\"/>.) <emphasis>In Hibernate3, it is no longer necessary to specify an <literal>unsaved-value</literal> explicitly.</emphasis>"
|
||||
msgstr "<literal>Parent</literal> が、ある <literal>Session</literal> でロードされ、UIのアクションで変更が加えられ、 <literal>update()</literal> を呼んでこの変更を新しいセッションで永続化したいとします。 <literal>Parent</literal> が子供のコレクションを持ち、カスケード更新が有効になっているため、 Hibernateはどの子供が新しくインスタンス化されたか、どれがデータベースの既存の行に相当するのかを知る必要があります。 <literal>Parent</literal> と <literal>Child</literal> の両方が <literal>java.lang.Long</literal> 型の識別プロパティを生成したとしましょう。 Hibernateはどの子供が新しいものかを決定するために識別プロパティの値を使います(versionやtimestampプロパティも使えます。 <xref linkend=\"manipulatingdata-updating-detached\"/> 参照)。Hibernate3になって、 明示的に <literal>unsaved-value</literal> を指定する必要はなくなりました。"
|
||||
|
||||
#: index.docbook:220
|
||||
msgid "The following code will update <literal>parent</literal> and <literal>child</literal> and insert <literal>newChild</literal>."
|
||||
msgstr "以下のコードは <literal>parent</literal> と <literal>child</literal> を更新し、<literal>newChild</literal> を挿入します。"
|
||||
|
||||
#: index.docbook:225
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:208
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[//parent and child were both loaded in a previous session\n"
|
||||
"parent.addChild(child);\n"
|
||||
"Child newChild = new Child();\n"
|
||||
"parent.addChild(newChild);\n"
|
||||
"session.update(parent);\n"
|
||||
"session.flush();]]>"
|
||||
"Suppose we loaded up a <literal>Parent</literal> in one <literal>Session</"
|
||||
"literal>, made some changes in a UI action and wish to persist these changes "
|
||||
"in a new session by calling <literal>update()</literal>. The "
|
||||
"<literal>Parent</literal> will contain a collection of childen and, since "
|
||||
"cascading update is enabled, Hibernate needs to know which children are "
|
||||
"newly instantiated and which represent existing rows in the database. Lets "
|
||||
"assume that both <literal>Parent</literal> and <literal>Child</literal> have "
|
||||
"genenerated identifier properties of type <literal>Long</literal>. Hibernate "
|
||||
"will use the identifier and version/timestamp property value to determine "
|
||||
"which of the children are new. (See <xref linkend=\"objectstate-saveorupdate"
|
||||
"\"/>.) <emphasis>In Hibernate3, it is no longer necessary to specify an "
|
||||
"<literal>unsaved-value</literal> explicitly.</emphasis>"
|
||||
msgstr ""
|
||||
"<![CDATA[//parent and child were both loaded in a previous session
\n"
|
||||
"//parentとchildは両方とも、以前のSessionでロードされています
\n"
|
||||
"parent.addChild(child);
\n"
|
||||
"Child newChild = new Child();
\n"
|
||||
"parent.addChild(newChild);
\n"
|
||||
"session.update(parent);
\n"
|
||||
"session.flush();]]>"
|
||||
"<literal>Parent</literal> が、ある <literal>Session</literal> でロードされ、"
|
||||
"UIのアクションで変更が加えられ、 <literal>update()</literal> を呼んでこの変更"
|
||||
"を新しいセッションで永続化したいとします。 <literal>Parent</literal> が子供の"
|
||||
"コレクションを持ち、カスケード更新が有効になっているため、 Hibernateはどの子"
|
||||
"供が新しくインスタンス化されたか、どれがデータベースの既存の行に相当するのか"
|
||||
"を知る必要があります。 <literal>Parent</literal> と <literal>Child</literal> "
|
||||
"の両方が <literal>java.lang.Long</literal> 型の識別プロパティを生成したとしま"
|
||||
"しょう。 Hibernateはどの子供が新しいものかを決定するために識別プロパティの値"
|
||||
"を使います(versionやtimestampプロパティも使えます。 <xref linkend="
|
||||
"\"manipulatingdata-updating-detached\"/> 参照)。Hibernate3になって、 明示的"
|
||||
"に <literal>unsaved-value</literal> を指定する必要はなくなりました。"
|
||||
|
||||
#: index.docbook:227
|
||||
msgid "Well, that's all very well for the case of a generated identifier, but what about assigned identifiers and composite identifiers? This is more difficult, since Hibernate can't use the identifier property to distinguish between a newly instantiated object (with an identifier assigned by the user) and an object loaded in a previous session. In this case, Hibernate will either use the timestamp or version property, or will actually query the second-level cache or, worst case, the database, to see if the row exists."
|
||||
msgstr "これらは生成された識別子の場合には非常に良いのですが、割り当てられた識別子と複合識別子の場合はどうでしょうか? これはHibernateが、(ユーザにより割り当てられた識別子を持つ)新しくインスタンス化されたオブジェクトと、 以前のSessionでロードされたオブジェクトを区別できないため、より難しいです。 この場合、Hibernateはタイムスタンプかバージョンのプロパティのどちらかを使うか、二次キャッシュに問い合わせます。 最悪の場合、行が存在するかどうかデータベースを見ます。"
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:220
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"The following code will update <literal>parent</literal> and <literal>child</"
|
||||
"literal> and insert <literal>newChild</literal>."
|
||||
msgstr ""
|
||||
"以下のコードは <literal>parent</literal> と <literal>child</literal> を更新"
|
||||
"し、<literal>newChild</literal> を挿入します。"
|
||||
|
||||
#: index.docbook:260
|
||||
#. Tag: programlisting
|
||||
#: example_parentchild.xml:225
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[//parent and child were both loaded in a previous session\n"
|
||||
"parent.addChild(child);\n"
|
||||
"Child newChild = new Child();\n"
|
||||
"parent.addChild(newChild);\n"
|
||||
"session.update(parent);\n"
|
||||
"session.flush();]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:227
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Well, that's all very well for the case of a generated identifier, but what "
|
||||
"about assigned identifiers and composite identifiers? This is more "
|
||||
"difficult, since Hibernate can't use the identifier property to distinguish "
|
||||
"between a newly instantiated object (with an identifier assigned by the "
|
||||
"user) and an object loaded in a previous session. In this case, Hibernate "
|
||||
"will either use the timestamp or version property, or will actually query "
|
||||
"the second-level cache or, worst case, the database, to see if the row "
|
||||
"exists."
|
||||
msgstr ""
|
||||
"これらは生成された識別子の場合には非常に良いのですが、割り当てられた識別子と"
|
||||
"複合識別子の場合はどうでしょうか? これはHibernateが、(ユーザにより割り当て"
|
||||
"られた識別子を持つ)新しくインスタンス化されたオブジェクトと、 以前のSession"
|
||||
"でロードされたオブジェクトを区別できないため、より難しいです。 この場合、"
|
||||
"Hibernateはタイムスタンプかバージョンのプロパティのどちらかを使うか、二次"
|
||||
"キャッシュに問い合わせます。 最悪の場合、行が存在するかどうかデータベースを見"
|
||||
"ます。"
|
||||
|
||||
#. Tag: title
|
||||
#: example_parentchild.xml:260
|
||||
#, no-c-format
|
||||
msgid "Conclusion"
|
||||
msgstr "<title>結論</title>"
|
||||
msgstr "結論"
|
||||
|
||||
#: index.docbook:262
|
||||
msgid "There is quite a bit to digest here and it might look confusing first time around. However, in practice, it all works out very nicely. Most Hibernate applications use the parent / child pattern in many places."
|
||||
msgstr "ここではかなりの量を要約したので、最初の頃は混乱しているように思われるかもしれません。 しかし実際は、すべて非常に良く動作します。ほとんどのHibernateアプリケーションでは、多くの場面で親子パターンを使用します。"
|
||||
|
||||
#: index.docbook:267
|
||||
msgid "We mentioned an alternative in the first paragraph. None of the above issues exist in the case of <literal><composite-element></literal> mappings, which have exactly the semantics of a parent / child relationship. Unfortunately, there are two big limitations to composite element classes: composite elements may not own collections, and they should not be the child of any entity other than the unique parent."
|
||||
msgstr "最初の段落で代替方法について触れました。上記のような問題は <literal><composite-element></literal> マッピングの場合は存在せず、 にもかかわらずそれは確かに親子関係のセマンティクスを持ちます。 しかし残念ながら、複合要素クラスには二つの大きな制限があります: 1つは複合要素はコレクションを持つことができないことです。もうひとつは、 ユニークな親ではないエンティティの子供となるべきではないということです"
|
||||
|
||||
msgid "ROLES_OF_TRANSLATORS"
|
||||
msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
|
||||
|
||||
msgid "CREDIT_FOR_TRANSLATORS"
|
||||
msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:262
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"There is quite a bit to digest here and it might look confusing first time "
|
||||
"around. However, in practice, it all works out very nicely. Most Hibernate "
|
||||
"applications use the parent / child pattern in many places."
|
||||
msgstr ""
|
||||
"ここではかなりの量を要約したので、最初の頃は混乱しているように思われるかもし"
|
||||
"れません。 しかし実際は、すべて非常に良く動作します。ほとんどのHibernateアプ"
|
||||
"リケーションでは、多くの場面で親子パターンを使用します。"
|
||||
|
||||
#. Tag: para
|
||||
#: example_parentchild.xml:267
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"We mentioned an alternative in the first paragraph. None of the above issues "
|
||||
"exist in the case of <literal><composite-element></literal> mappings, "
|
||||
"which have exactly the semantics of a parent / child relationship. "
|
||||
"Unfortunately, there are two big limitations to composite element classes: "
|
||||
"composite elements may not own collections, and they should not be the child "
|
||||
"of any entity other than the unique parent."
|
||||
msgstr ""
|
||||
"最初の段落で代替方法について触れました。上記のような問題は <literal><"
|
||||
"composite-element></literal> マッピングの場合は存在せず、 にもかかわらずそ"
|
||||
"れは確かに親子関係のセマンティクスを持ちます。 しかし残念ながら、複合要素クラ"
|
||||
"スには二つの大きな制限があります: 1つは複合要素はコレクションを持つことがで"
|
||||
"きないことです。もうひとつは、 ユニークな親ではないエンティティの子供となるべ"
|
||||
"きではないということです"
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,194 +1,286 @@
|
|||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2007-10-25 07:47+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
#: index.docbook:5
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#. Tag: title
|
||||
#: filters.xml:5
|
||||
#, no-c-format
|
||||
msgid "Filtering data"
|
||||
msgstr "データのフィルタリング"
|
||||
|
||||
#: index.docbook:7
|
||||
msgid "Hibernate3 provides an innovative new approach to handling data with \"visibility\" rules. A <emphasis>Hibernate filter</emphasis> is a global, named, parameterized filter that may be enabled or disabled for a particular Hibernate session."
|
||||
msgstr "Hibernate3では「可視性」ルールに基づいてデータを扱うための画期的な方法を用意しています。 <emphasis>Hibernate filter</emphasis> はグローバルで、名前付きで、パラメータ化されたフィルタです。 これはHibernateセッションごとに有効無効を切り替えられます。"
|
||||
#. Tag: para
|
||||
#: filters.xml:7
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Hibernate3 provides an innovative new approach to handling data with "
|
||||
"\"visibility\" rules. A <emphasis>Hibernate filter</emphasis> is a global, "
|
||||
"named, parameterized filter that may be enabled or disabled for a particular "
|
||||
"Hibernate session."
|
||||
msgstr ""
|
||||
"Hibernate3では「可視性」ルールに基づいてデータを扱うための画期的な方法を用意"
|
||||
"しています。 <emphasis>Hibernate filter</emphasis> はグローバルで、名前付き"
|
||||
"で、パラメータ化されたフィルタです。 これはHibernateセッションごとに有効無効"
|
||||
"を切り替えられます。"
|
||||
|
||||
#: index.docbook:14
|
||||
#. Tag: title
|
||||
#: filters.xml:14
|
||||
#, no-c-format
|
||||
msgid "Hibernate filters"
|
||||
msgstr "Hibernateのフィルタ"
|
||||
|
||||
#: index.docbook:16
|
||||
msgid "Hibernate3 adds the ability to pre-define filter criteria and attach those filters at both a class and a collection level. A filter criteria is the ability to define a restriction clause very similiar to the existing \"where\" attribute available on the class and various collection elements. Except these filter conditions can be parameterized. The application can then make the decision at runtime whether given filters should be enabled and what their parameter values should be. Filters can be used like database views, but parameterized inside the application."
|
||||
msgstr "Hibernate3はフィルタクライテリアをあらかじめ定義し、 これらのフィルタをクラスやコレクションレベルに加える機能を加えました。 フィルタクライテリアは制約節を定義する機能です。 これらのフィルタ条件はパラメータ化できるということを除き、 クラスやさまざまなコレクション要素で利用可能な「where」句に非常によく似ています。 アプリケーションは、与えられたフィルタを可能にすべきか、 そしてそのパラメータ値を何にすべきかを実行時に決定することができます。 フィルタはデータベースビューのように使用されますが、アプリケーション内ではパラメータ化されます。"
|
||||
|
||||
#: index.docbook:26
|
||||
msgid "In order to use filters, they must first be defined and then attached to the appropriate mapping elements. To define a filter, use the <literal><filter-def/></literal> element within a <literal><hibernate-mapping/></literal> element:"
|
||||
msgstr "フィルタを使うためにはまず、適切なマッピング要素に定義、追加しなくてはなりません。 フィルタを定義するためには、 <literal><hibernate-mapping/></literal> 要素内で <literal><filter-def/></literal> 要素を使用します。:"
|
||||
|
||||
#: index.docbook:32
|
||||
#. Tag: para
|
||||
#: filters.xml:16
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<filter-def name=\"myFilter\">\n"
|
||||
" <filter-param name=\"myFilterParam\" type=\"string\"/>\n"
|
||||
"</filter-def>]]>"
|
||||
"Hibernate3 adds the ability to pre-define filter criteria and attach those "
|
||||
"filters at both a class and a collection level. A filter criteria is the "
|
||||
"ability to define a restriction clause very similiar to the existing \"where"
|
||||
"\" attribute available on the class and various collection elements. Except "
|
||||
"these filter conditions can be parameterized. The application can then make "
|
||||
"the decision at runtime whether given filters should be enabled and what "
|
||||
"their parameter values should be. Filters can be used like database views, "
|
||||
"but parameterized inside the application."
|
||||
msgstr ""
|
||||
"<![CDATA[<filter-def name=\"myFilter\">
\n"
|
||||
" <filter-param name=\"myFilterParam\" type=\"string\"/>
\n"
|
||||
"</filter-def>]]>"
|
||||
"Hibernate3はフィルタクライテリアをあらかじめ定義し、 これらのフィルタをクラス"
|
||||
"やコレクションレベルに加える機能を加えました。 フィルタクライテリアは制約節を"
|
||||
"定義する機能です。 これらのフィルタ条件はパラメータ化できるということを除"
|
||||
"き、 クラスやさまざまなコレクション要素で利用可能な「where」句に非常によく似て"
|
||||
"います。 アプリケーションは、与えられたフィルタを可能にすべきか、 そしてその"
|
||||
"パラメータ値を何にすべきかを実行時に決定することができます。 フィルタはデータ"
|
||||
"ベースビューのように使用されますが、アプリケーション内ではパラメータ化されま"
|
||||
"す。"
|
||||
|
||||
#: index.docbook:34
|
||||
#. Tag: para
|
||||
#: filters.xml:26
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"In order to use filters, they must first be defined and then attached to the "
|
||||
"appropriate mapping elements. To define a filter, use the <literal><"
|
||||
"filter-def/></literal> element within a <literal><hibernate-mapping/"
|
||||
"></literal> element:"
|
||||
msgstr ""
|
||||
"フィルタを使うためにはまず、適切なマッピング要素に定義、追加しなくてはなりま"
|
||||
"せん。 フィルタを定義するためには、 <literal><hibernate-mapping/></"
|
||||
"literal> 要素内で <literal><filter-def/></literal> 要素を使用します。:"
|
||||
|
||||
#. Tag: programlisting
|
||||
#: filters.xml:32
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<filter-def name=\"myFilter\">\n"
|
||||
" <filter-param name=\"myFilterParam\" type=\"string\"/>\n"
|
||||
"</filter-def>]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: para
|
||||
#: filters.xml:34
|
||||
#, no-c-format
|
||||
msgid "Then, this filter can be attached to a class:"
|
||||
msgstr "そうしてフィルタはクラスへと結び付けられます。:"
|
||||
|
||||
#: index.docbook:38
|
||||
#. Tag: programlisting
|
||||
#: filters.xml:38
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<class name=\"myClass\" ...>\n"
|
||||
" ...\n"
|
||||
" <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
|
||||
"</class>]]>"
|
||||
"<![CDATA[<class name=\"myClass\" ...>\n"
|
||||
" ...\n"
|
||||
" <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN"
|
||||
"\"/>\n"
|
||||
"</class>]]>"
|
||||
msgstr ""
|
||||
"<![CDATA[<class name=\"myClass\" ...>
\n"
|
||||
" ...
\n"
|
||||
" <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>
\n"
|
||||
"</class>]]>"
|
||||
|
||||
#: index.docbook:40
|
||||
#. Tag: para
|
||||
#: filters.xml:40
|
||||
#, no-c-format
|
||||
msgid "or, to a collection:"
|
||||
msgstr "また、コレクションに対しては次のようになります。:"
|
||||
|
||||
#: index.docbook:44
|
||||
#. Tag: programlisting
|
||||
#: filters.xml:44
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<set ...>\n"
|
||||
" <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
|
||||
"</set>]]>"
|
||||
"<![CDATA[<set ...>\n"
|
||||
" <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN"
|
||||
"\"/>\n"
|
||||
"</set>]]>"
|
||||
msgstr ""
|
||||
"<![CDATA[<set ...>
\n"
|
||||
" <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>
\n"
|
||||
"</set>]]>"
|
||||
|
||||
#: index.docbook:46
|
||||
#. Tag: para
|
||||
#: filters.xml:46
|
||||
#, no-c-format
|
||||
msgid "or, even to both (or multiples of each) at the same time."
|
||||
msgstr "どちらに対しても(また、それぞれを複数)同時に設定することもできます。"
|
||||
|
||||
#: index.docbook:50
|
||||
msgid "The methods on <literal>Session</literal> are: <literal>enableFilter(String filterName)</literal>, <literal>getEnabledFilter(String filterName)</literal>, and <literal>disableFilter(String filterName)</literal>. By default, filters are <emphasis>not</emphasis> enabled for a given session; they must be explcitly enabled through use of the <literal>Session.enabledFilter()</literal> method, which returns an instance of the <literal>Filter</literal> interface. Using the simple filter defined above, this would look like:"
|
||||
msgstr "<literal>Session</literal> 上のメソッドは <literal>enableFilter(String filterName)</literal>, <literal>getEnabledFilter(String filterName)</literal>, <literal>disableFilter(String filterName)</literal> です。 デフォルトでは、フィルタは与えられたセッションに対して使用 <emphasis>できません</emphasis> 。 <literal>Filter</literal> インスタンスを返り値とする <literal>Session.enabledFilter()</literal> メソッドを使うことで、 フィルタは明示的に使用可能となります。 上で定義した単純なフィルタの使用は、このようになります。:"
|
||||
#. Tag: para
|
||||
#: filters.xml:50
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"The methods on <literal>Session</literal> are: <literal>enableFilter(String "
|
||||
"filterName)</literal>, <literal>getEnabledFilter(String filterName)</"
|
||||
"literal>, and <literal>disableFilter(String filterName)</literal>. By "
|
||||
"default, filters are <emphasis>not</emphasis> enabled for a given session; "
|
||||
"they must be explcitly enabled through use of the <literal>Session."
|
||||
"enabledFilter()</literal> method, which returns an instance of the "
|
||||
"<literal>Filter</literal> interface. Using the simple filter defined above, "
|
||||
"this would look like:"
|
||||
msgstr ""
|
||||
"<literal>Session</literal> 上のメソッドは <literal>enableFilter(String "
|
||||
"filterName)</literal>, <literal>getEnabledFilter(String filterName)</"
|
||||
"literal>, <literal>disableFilter(String filterName)</literal> です。 デフォル"
|
||||
"トでは、フィルタは与えられたセッションに対して使用 <emphasis>できません</"
|
||||
"emphasis> 。 <literal>Filter</literal> インスタンスを返り値とする "
|
||||
"<literal>Session.enabledFilter()</literal> メソッドを使うことで、 フィルタは"
|
||||
"明示的に使用可能となります。 上で定義した単純なフィルタの使用は、このようにな"
|
||||
"ります。:"
|
||||
|
||||
#: index.docbook:59
|
||||
msgid "<![CDATA[session.enableFilter(\"myFilter\").setParameter(\"myFilterParam\", \"some-value\");]]>"
|
||||
msgstr "<![CDATA[session.enableFilter(\"myFilter\").setParameter(\"myFilterParam\", \"some-value\");]]>"
|
||||
#. Tag: programlisting
|
||||
#: filters.xml:59
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[session.enableFilter(\"myFilter\").setParameter(\"myFilterParam\", "
|
||||
"\"some-value\");]]>"
|
||||
msgstr ""
|
||||
|
||||
#: index.docbook:61
|
||||
msgid "Note that methods on the org.hibernate.Filter interface do allow the method-chaining common to much of Hibernate."
|
||||
msgstr "org.hibernate.Filterインターフェイスのメソッドは、 Hibernateの多くに共通しているメソッド連鎖を許していることに注意してください。"
|
||||
#. Tag: para
|
||||
#: filters.xml:61
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Note that methods on the org.hibernate.Filter interface do allow the method-"
|
||||
"chaining common to much of Hibernate."
|
||||
msgstr ""
|
||||
"org.hibernate.Filterインターフェイスのメソッドは、 Hibernateの多くに共通して"
|
||||
"いるメソッド連鎖を許していることに注意してください。"
|
||||
|
||||
#: index.docbook:65
|
||||
msgid "A full example, using temporal data with an effective record date pattern:"
|
||||
#. Tag: para
|
||||
#: filters.xml:65
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"A full example, using temporal data with an effective record date pattern:"
|
||||
msgstr "有効なレコードデータパターンを持つ一時データを使った完全な例です:"
|
||||
|
||||
#: index.docbook:69
|
||||
#. Tag: programlisting
|
||||
#: filters.xml:69
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<filter-def name=\"effectiveDate\">\n"
|
||||
" <filter-param name=\"asOfDate\" type=\"date\"/>\n"
|
||||
"</filter-def>\n"
|
||||
"\n"
|
||||
"<class name=\"Employee\" ...>\n"
|
||||
"...\n"
|
||||
" <many-to-one name=\"department\" column=\"dept_id\" class=\"Department\"/>\n"
|
||||
" <property name=\"effectiveStartDate\" type=\"date\" column=\"eff_start_dt\"/>\n"
|
||||
" <property name=\"effectiveEndDate\" type=\"date\" column=\"eff_end_dt\"/>\n"
|
||||
"...\n"
|
||||
" <!--\n"
|
||||
" Note that this assumes non-terminal records have an eff_end_dt set to\n"
|
||||
" a max db date for simplicity-sake\n"
|
||||
" -->\n"
|
||||
" <filter name=\"effectiveDate\"\n"
|
||||
" condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
|
||||
"</class>\n"
|
||||
"\n"
|
||||
"<class name=\"Department\" ...>\n"
|
||||
"...\n"
|
||||
" <set name=\"employees\" lazy=\"true\">\n"
|
||||
" <key column=\"dept_id\"/>\n"
|
||||
" <one-to-many class=\"Employee\"/>\n"
|
||||
" <filter name=\"effectiveDate\"\n"
|
||||
" condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
|
||||
" </set>\n"
|
||||
"</class>]]>"
|
||||
"<![CDATA[<filter-def name=\"effectiveDate\">\n"
|
||||
" <filter-param name=\"asOfDate\" type=\"date\"/>\n"
|
||||
"</filter-def>\n"
|
||||
"\n"
|
||||
"<class name=\"Employee\" ...>\n"
|
||||
"...\n"
|
||||
" <many-to-one name=\"department\" column=\"dept_id\" class=\"Department\"/"
|
||||
">\n"
|
||||
" <property name=\"effectiveStartDate\" type=\"date\" column=\"eff_start_dt"
|
||||
"\"/>\n"
|
||||
" <property name=\"effectiveEndDate\" type=\"date\" column=\"eff_end_dt\"/"
|
||||
">\n"
|
||||
"...\n"
|
||||
" <!--\n"
|
||||
" Note that this assumes non-terminal records have an eff_end_dt set "
|
||||
"to\n"
|
||||
" a max db date for simplicity-sake\n"
|
||||
" -->\n"
|
||||
" <filter name=\"effectiveDate\"\n"
|
||||
" condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
|
||||
"</class>\n"
|
||||
"\n"
|
||||
"<class name=\"Department\" ...>\n"
|
||||
"...\n"
|
||||
" <set name=\"employees\" lazy=\"true\">\n"
|
||||
" <key column=\"dept_id\"/>\n"
|
||||
" <one-to-many class=\"Employee\"/>\n"
|
||||
" <filter name=\"effectiveDate\"\n"
|
||||
" condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/"
|
||||
">\n"
|
||||
" </set>\n"
|
||||
"</class>]]>"
|
||||
msgstr ""
|
||||
"<![CDATA[<filter-def name=\"effectiveDate\">
\n"
|
||||
" <filter-param name=\"asOfDate\" type=\"date\"/>
\n"
|
||||
"</filter-def>
\n"
|
||||
"
\n"
|
||||
"<class name=\"Employee\" ...>
\n"
|
||||
"...
\n"
|
||||
" <many-to-one name=\"department\" column=\"dept_id\" class=\"Department\"/>
\n"
|
||||
" <property name=\"effectiveStartDate\" type=\"date\" column=\"eff_start_dt\"/>
\n"
|
||||
" <property name=\"effectiveEndDate\" type=\"date\" column=\"eff_end_dt\"/>
\n"
|
||||
"...
\n"
|
||||
" <!--
\n"
|
||||
" Note that this assumes non-terminal records have an eff_end_dt set to
\n"
|
||||
" a max db date for simplicity-sake
\n"
|
||||
"
\n"
|
||||
"
\n"
|
||||
" -->
\n"
|
||||
" <filter name=\"effectiveDate\"
\n"
|
||||
" condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>
\n"
|
||||
"</class>
\n"
|
||||
"
\n"
|
||||
"<class name=\"Department\" ...>
\n"
|
||||
"...
\n"
|
||||
" <set name=\"employees\" lazy=\"true\">
\n"
|
||||
" <key column=\"dept_id\"/>
\n"
|
||||
" <one-to-many class=\"Employee\"/>
\n"
|
||||
" <filter name=\"effectiveDate\"
\n"
|
||||
" condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>
\n"
|
||||
" </set>
\n"
|
||||
"</class>]]>"
|
||||
|
||||
#: index.docbook:71
|
||||
msgid "Then, in order to ensure that you always get back currently effective records, simply enable the filter on the session prior to retrieving employee data:"
|
||||
msgstr "常に現在の有効レコードを返却することを保証するために、 単純に、社員データの検索より前にセッション上のフィルタを有効にします。"
|
||||
|
||||
#: index.docbook:76
|
||||
#. Tag: para
|
||||
#: filters.xml:71
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Session session = ...;\n"
|
||||
"session.enabledFilter(\"effectiveDate\").setParameter(\"asOfDate\", new Date());\n"
|
||||
"List results = session.createQuery(\"from Employee as e where e.salary > :targetSalary\")\n"
|
||||
" .setLong(\"targetSalary\", new Long(1000000))\n"
|
||||
" .list();\n"
|
||||
"]]>"
|
||||
"Then, in order to ensure that you always get back currently effective "
|
||||
"records, simply enable the filter on the session prior to retrieving "
|
||||
"employee data:"
|
||||
msgstr ""
|
||||
"<![CDATA[Session session = ...;
\n"
|
||||
"session.enabledFilter(\"effectiveDate\").setParameter(\"asOfDate\", new Date());
\n"
|
||||
"List results = session.createQuery(\"from Employee as e where e.salary > :targetSalary\")
\n"
|
||||
" .setLong(\"targetSalary\", new Long(1000000))
\n"
|
||||
" .list();
\n"
|
||||
"]]>"
|
||||
"常に現在の有効レコードを返却することを保証するために、 単純に、社員データの検"
|
||||
"索より前にセッション上のフィルタを有効にします。"
|
||||
|
||||
#: index.docbook:78
|
||||
msgid "In the HQL above, even though we only explicitly mentioned a salary constraint on the results, because of the enabled filter the query will return only currently active employees who have a salary greater than a million dollars."
|
||||
msgstr "上記のHQLでは、結果の給料の制約について明示的に触れただけですが、 有効になっているフィルタのおかげで、このクエリは給料が100万ドル以上の現役の社員だけを返します。"
|
||||
|
||||
#: index.docbook:84
|
||||
msgid "Note: if you plan on using filters with outer joining (either through HQL or load fetching) be careful of the direction of the condition expression. Its safest to set this up for left outer joining; in general, place the parameter first followed by the column name(s) after the operator."
|
||||
msgstr "(HQLかロードフェッチで)外部結合を持つフィルタを使うつもりなら、 条件式の方向に注意してください。 これは左外部結合のために設定するのが最も安全です。 一般的に、演算子の後カラム名に続けて最初のパラメータを配置してください。"
|
||||
|
||||
#: index.docbook:91
|
||||
msgid "After being defined a filter might be attached to multiple entities and/or collections each with its own condition. That can be tedious when the conditions are the same each time. Thus <literal><filter-def/></literal> allows defining a default condition, either as an attribute or CDATA:"
|
||||
msgstr ""
|
||||
|
||||
#: index.docbook:98
|
||||
#. Tag: programlisting
|
||||
#: filters.xml:76
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<filter-def name=\"myFilter\" condition=\"abc > xyz\">...</filter-def>\n"
|
||||
"<filter-def name=\"myOtherFilter\">abc=xyz</filter-def>]]>"
|
||||
"<![CDATA[Session session = ...;\n"
|
||||
"session.enabledFilter(\"effectiveDate\").setParameter(\"asOfDate\", new Date"
|
||||
"());\n"
|
||||
"List results = session.createQuery(\"from Employee as e where e.salary > :"
|
||||
"targetSalary\")\n"
|
||||
" .setLong(\"targetSalary\", new Long(1000000))\n"
|
||||
" .list();\n"
|
||||
"]]>"
|
||||
msgstr ""
|
||||
|
||||
#: index.docbook:100
|
||||
msgid "This default condition will then be used whenever the filter is attached to something without specifying a condition. Note that this means you can give a specific condition as part of the attachment of the filter which overrides the default condition in that particular case."
|
||||
#. Tag: para
|
||||
#: filters.xml:78
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"In the HQL above, even though we only explicitly mentioned a salary "
|
||||
"constraint on the results, because of the enabled filter the query will "
|
||||
"return only currently active employees who have a salary greater than a "
|
||||
"million dollars."
|
||||
msgstr ""
|
||||
"上記のHQLでは、結果の給料の制約について明示的に触れただけですが、 有効になっ"
|
||||
"ているフィルタのおかげで、このクエリは給料が100万ドル以上の現役の社員だけを返"
|
||||
"します。"
|
||||
|
||||
#. Tag: para
|
||||
#: filters.xml:84
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Note: if you plan on using filters with outer joining (either through HQL or "
|
||||
"load fetching) be careful of the direction of the condition expression. Its "
|
||||
"safest to set this up for left outer joining; in general, place the "
|
||||
"parameter first followed by the column name(s) after the operator."
|
||||
msgstr ""
|
||||
"(HQLかロードフェッチで)外部結合を持つフィルタを使うつもりなら、 条件式の方向"
|
||||
"に注意してください。 これは左外部結合のために設定するのが最も安全です。 一般"
|
||||
"的に、演算子の後カラム名に続けて最初のパラメータを配置してください。"
|
||||
|
||||
#. Tag: para
|
||||
#: filters.xml:91
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"After being defined a filter might be attached to multiple entities and/or "
|
||||
"collections each with its own condition. That can be tedious when the "
|
||||
"conditions are the same each time. Thus <literal><filter-def/></"
|
||||
"literal> allows defining a default condition, either as an attribute or "
|
||||
"CDATA:"
|
||||
msgstr "translator-credits"
|
||||
|
||||
#. Tag: programlisting
|
||||
#: filters.xml:98
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<filter-def name=\"myFilter\" condition=\"abc > xyz\">...</filter-"
|
||||
"def>\n"
|
||||
"<filter-def name=\"myOtherFilter\">abc=xyz</filter-def>]]>"
|
||||
msgstr ""
|
||||
|
||||
msgid "ROLES_OF_TRANSLATORS"
|
||||
msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
|
||||
|
||||
msgid "CREDIT_FOR_TRANSLATORS"
|
||||
msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
|
||||
|
||||
#. Tag: para
|
||||
#: filters.xml:100
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"This default condition will then be used whenever the filter is attached to "
|
||||
"something without specifying a condition. Note that this means you can give "
|
||||
"a specific condition as part of the attachment of the filter which overrides "
|
||||
"the default condition in that particular case."
|
||||
msgstr ""
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,68 +1,196 @@
|
|||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2007-10-25 07:47+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
#: index.docbook:21
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#. Tag: title
|
||||
#: preface.xml:21
|
||||
#, no-c-format
|
||||
msgid "Preface"
|
||||
msgstr "<title>前書き</title>"
|
||||
msgstr "前書き"
|
||||
|
||||
#: index.docbook:23
|
||||
msgid "Working with object-oriented software and a relational database can be cumbersome and time consuming in today's enterprise environments. Hibernate is an object/relational mapping tool for Java environments. The term object/relational mapping (ORM) refers to the technique of mapping a data representation from an object model to a relational data model with a SQL-based schema."
|
||||
msgstr "今日の企業環境において、オブジェクト指向ソフトウェアとリレーショナルデータベースに関わる作業は 煩雑で膨大な時間を必要とします。 HibernateはJava環境のオブジェクト/リレーショナルマッピングツールです。 オブジェクト/リレーショナルマッピング(ORM)とは、 オブジェクトモデルからSQLベーススキーマのリレーショナルデータモデルへと、 データ表現をマッピングする(対応付ける)技術のことです。"
|
||||
#. Tag: para
|
||||
#: preface.xml:23
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Working with object-oriented software and a relational database can be "
|
||||
"cumbersome and time consuming in today's enterprise environments. Hibernate "
|
||||
"is an object/relational mapping tool for Java environments. The term object/"
|
||||
"relational mapping (ORM) refers to the technique of mapping a data "
|
||||
"representation from an object model to a relational data model with a SQL-"
|
||||
"based schema."
|
||||
msgstr ""
|
||||
"今日の企業環境において、オブジェクト指向ソフトウェアとリレーショナルデータ"
|
||||
"ベースに関わる作業は 煩雑で膨大な時間を必要とします。 HibernateはJava環境のオ"
|
||||
"ブジェクト/リレーショナルマッピングツールです。 オブジェクト/リレーショナル"
|
||||
"マッピング(ORM)とは、 オブジェクトモデルからSQLベーススキーマのリレーショナ"
|
||||
"ルデータモデルへと、 データ表現をマッピングする(対応付ける)技術のことです。"
|
||||
|
||||
#: index.docbook:31
|
||||
msgid "Hibernate not only takes care of the mapping from Java classes to database tables (and from Java data types to SQL data types), but also provides data query and retrieval facilities and can significantly reduce development time otherwise spent with manual data handling in SQL and JDBC."
|
||||
msgstr "HibernateはJavaクラスからデータベーステーブルへ(そしてJavaデータ型からSQLデータ型へ) のマッピングを処理するだけではなく、データのクエリと復元の仕組みも提供します。 このおかげでSQLとJDBCを使った手作業でのデータ処理に費やされていた開発時間を大幅に削減できます。"
|
||||
#. Tag: para
|
||||
#: preface.xml:31
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Hibernate not only takes care of the mapping from Java classes to database "
|
||||
"tables (and from Java data types to SQL data types), but also provides data "
|
||||
"query and retrieval facilities and can significantly reduce development time "
|
||||
"otherwise spent with manual data handling in SQL and JDBC."
|
||||
msgstr ""
|
||||
"HibernateはJavaクラスからデータベーステーブルへ(そしてJavaデータ型からSQL"
|
||||
"データ型へ) のマッピングを処理するだけではなく、データのクエリと復元の仕組み"
|
||||
"も提供します。 このおかげでSQLとJDBCを使った手作業でのデータ処理に費やされて"
|
||||
"いた開発時間を大幅に削減できます。"
|
||||
|
||||
#: index.docbook:38
|
||||
msgid "Hibernates goal is to relieve the developer from 95 percent of common data persistence related programming tasks. Hibernate may not be the best solution for data-centric applications that only use stored-procedures to implement the business logic in the database, it is most useful with object-oriented domain models and business logic in the Java-based middle-tier. However, Hibernate can certainly help you to remove or encapsulate vendor-specific SQL code and will help with the common task of result set translation from a tabular representation to a graph of objects."
|
||||
msgstr "Hibernateの最終目標は、データの永続化に関わる一般的なプログラミング作業の95%から開発者を解放することです。 Hibernateはビジネスロジックの実装にストアドプロシージャを使う データ中心アプリケーションに対してのベストソリューションであるに留まりません。 オブジェクト指向ドメインモデルとJavaベースの中間層でのビジネスロジックに対して最も役に立ちます。 しかしHibernateはベンダ固有のSQLコードを削減またはカプセル化したり、 表形式からオブジェクトのグラフへとリザルトセットを変換するなどの、 一般的なタスクにも役立つでしょう。"
|
||||
#. Tag: para
|
||||
#: preface.xml:38
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Hibernates goal is to relieve the developer from 95 percent of common data "
|
||||
"persistence related programming tasks. Hibernate may not be the best "
|
||||
"solution for data-centric applications that only use stored-procedures to "
|
||||
"implement the business logic in the database, it is most useful with object-"
|
||||
"oriented domain models and business logic in the Java-based middle-tier. "
|
||||
"However, Hibernate can certainly help you to remove or encapsulate vendor-"
|
||||
"specific SQL code and will help with the common task of result set "
|
||||
"translation from a tabular representation to a graph of objects."
|
||||
msgstr ""
|
||||
"Hibernateの最終目標は、データの永続化に関わる一般的なプログラミング作業の95%"
|
||||
"から開発者を解放することです。 Hibernateはビジネスロジックの実装にストアドプ"
|
||||
"ロシージャを使う データ中心アプリケーションに対してのベストソリューションであ"
|
||||
"るに留まりません。 オブジェクト指向ドメインモデルとJavaベースの中間層でのビジ"
|
||||
"ネスロジックに対して最も役に立ちます。 しかしHibernateはベンダ固有のSQLコード"
|
||||
"を削減またはカプセル化したり、 表形式からオブジェクトのグラフへとリザルトセッ"
|
||||
"トを変換するなどの、 一般的なタスクにも役立つでしょう。"
|
||||
|
||||
#: index.docbook:48
|
||||
msgid "If you are new to Hibernate and Object/Relational Mapping or even Java, please follow these steps:"
|
||||
msgstr "Hibernateやオブジェクト/リレーショナルマッピング、 さらにはJavaが初めての方は、以下のステップに従ってください:"
|
||||
#. Tag: para
|
||||
#: preface.xml:48
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"If you are new to Hibernate and Object/Relational Mapping or even Java, "
|
||||
"please follow these steps:"
|
||||
msgstr ""
|
||||
"Hibernateやオブジェクト/リレーショナルマッピング、 さらにはJavaが初めての方"
|
||||
"は、以下のステップに従ってください:"
|
||||
|
||||
#: index.docbook:55
|
||||
msgid "Read <xref linkend=\"tutorial\"/> for a tutorial with step-by-step instructions. The source code for the tutorial is included in the distribution in the <literal>doc/reference/tutorial/</literal> directory."
|
||||
msgstr "を読んでください。 段階的に解説していきます。 チュートリアルのソースコードはディストリビューションの <literal>doc/reference/tutorial</literal> ディレクトリに含まれています。"
|
||||
#. Tag: para
|
||||
#: preface.xml:55
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Read <xref linkend=\"tutorial\"/> for a tutorial with step-by-step "
|
||||
"instructions. The source code for the tutorial is included in the "
|
||||
"distribution in the <literal>doc/reference/tutorial/</literal> directory."
|
||||
msgstr ""
|
||||
"<xref linkend=\"tutorial\"/> を読んでください。 段階的に解説していきます。 "
|
||||
"チュートリアルのソースコードはディストリビューションの <literal>doc/"
|
||||
"reference/tutorial</literal> ディレクトリに含まれています。"
|
||||
|
||||
#: index.docbook:63
|
||||
msgid "Read <xref linkend=\"architecture\"/> to understand the environments where Hibernate can be used."
|
||||
msgstr "を読んで、Hibernateが利用可能な環境を理解してください。"
|
||||
#. Tag: para
|
||||
#: preface.xml:63
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Read <xref linkend=\"architecture\"/> to understand the environments where "
|
||||
"Hibernate can be used."
|
||||
msgstr ""
|
||||
"<xref linkend=\"architecture\"/> を読んで、Hibernateが利用可能な環境を理解し"
|
||||
"てください。"
|
||||
|
||||
#: index.docbook:69
|
||||
msgid "Have a look at the <literal>eg/</literal> directory in the Hibernate distribution, it contains a simple standalone application. Copy your JDBC driver to the <literal>lib/</literal> directory and edit <literal>etc/hibernate.properties</literal>, specifying correct values for your database. From a command prompt in the distribution directory, type <literal>ant eg</literal> (using Ant), or under Windows, type <literal>build eg</literal>."
|
||||
msgstr "Hibernateディストリビューションの <literal>eg/</literal> ディレクトリを見てください。 簡単なスタンドアローンのアプリケーションがあります。 JDBCドライバを <literal>lib/</literal> ディレクトリにコピーして、 自分のデータベースに合う正しい値を指定するように <literal>etc/hibernate.properties</literal> を編集してください。 ディストリビューションディレクトリから、コマンドプロンプトで <literal>ant eg</literal> とタイプしてください(Antを使います)。 またWindows環境では <literal>build eg</literal> とタイプしてください。"
|
||||
#. Tag: para
|
||||
#: preface.xml:69
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Have a look at the <literal>eg/</literal> directory in the Hibernate "
|
||||
"distribution, it contains a simple standalone application. Copy your JDBC "
|
||||
"driver to the <literal>lib/</literal> directory and edit <literal>etc/"
|
||||
"hibernate.properties</literal>, specifying correct values for your database. "
|
||||
"From a command prompt in the distribution directory, type <literal>ant eg</"
|
||||
"literal> (using Ant), or under Windows, type <literal>build eg</literal>."
|
||||
msgstr ""
|
||||
"Hibernateディストリビューションの <literal>eg/</literal> ディレクトリを見てく"
|
||||
"ださい。 簡単なスタンドアローンのアプリケーションがあります。 JDBCドライバを "
|
||||
"<literal>lib/</literal> ディレクトリにコピーして、 自分のデータベースに合う正"
|
||||
"しい値を指定するように <literal>etc/hibernate.properties</literal> を編集して"
|
||||
"ください。 ディストリビューションディレクトリから、コマンドプロンプトで "
|
||||
"<literal>ant eg</literal> とタイプしてください(Antを使います)。 またWindows"
|
||||
"環境では <literal>build eg</literal> とタイプしてください。"
|
||||
|
||||
#: index.docbook:80
|
||||
msgid "Use this reference documentation as your primary source of information. Consider reading <emphasis>Java Persistence with Hibernate</emphasis> (http://www.manning.com/bauer2) if you need more help with application design or if you prefer a step-by-step tutorial. Also visit http://caveatemptor.hibernate.org and download the example application for Java Persistence with Hibernate."
|
||||
msgstr "このリファレンスドキュメントを第一の情報源として利用してください。 アプリケーション設計についてのさらなる情報や段階的なチュートリアルを探しているなら、 <emphasis>Java Persistence with Hibernate</emphasis>(http://www.manning.com/bauer2) をおすすめします。 またhttp://caveatemptor.hibernate.orgから Java Persistence with Hibernateの例題のアプリケーションをダウンロードできます。"
|
||||
#. Tag: para
|
||||
#: preface.xml:80
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Use this reference documentation as your primary source of information. "
|
||||
"Consider reading <emphasis>Java Persistence with Hibernate</emphasis> "
|
||||
"(http://www.manning.com/bauer2) if you need more help with application "
|
||||
"design or if you prefer a step-by-step tutorial. Also visit http://"
|
||||
"caveatemptor.hibernate.org and download the example application for Java "
|
||||
"Persistence with Hibernate."
|
||||
msgstr ""
|
||||
"このリファレンスドキュメントを第一の情報源として利用してください。 アプリケー"
|
||||
"ション設計についてのさらなる情報や段階的なチュートリアルを探しているなら、 "
|
||||
"<emphasis>Java Persistence with Hibernate</emphasis>(http://www.manning.com/"
|
||||
"bauer2) をおすすめします。 またhttp://caveatemptor.hibernate.orgから Java "
|
||||
"Persistence with Hibernateの例題のアプリケーションをダウンロードできます。"
|
||||
|
||||
#: index.docbook:90
|
||||
#. Tag: para
|
||||
#: preface.xml:90
|
||||
#, no-c-format
|
||||
msgid "FAQs are answered on the Hibernate website."
|
||||
msgstr "FAQはHibernateウェブサイトにあります。"
|
||||
|
||||
#: index.docbook:95
|
||||
msgid "Third party demos, examples, and tutorials are linked on the Hibernate website."
|
||||
msgstr "サードパーティのデモ、例、チュートリアルはHibernateウェブサイトにリンクがあります。"
|
||||
#. Tag: para
|
||||
#: preface.xml:95
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Third party demos, examples, and tutorials are linked on the Hibernate "
|
||||
"website."
|
||||
msgstr ""
|
||||
"サードパーティのデモ、例、チュートリアルはHibernateウェブサイトにリンクがあり"
|
||||
"ます。"
|
||||
|
||||
#: index.docbook:101
|
||||
msgid "The Community Area on the Hibernate website is a good resource for design patterns and various integration solutions (Tomcat, JBoss AS, Struts, EJB, etc.)."
|
||||
msgstr "Hibernateウェブサイトのコミュニティエリアは、デザインパターンやさまざまな統合ソリューション (Tomcat, JBoss AS, Struts, EJB, 等)についてのよい情報源です。"
|
||||
#. Tag: para
|
||||
#: preface.xml:101
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"The Community Area on the Hibernate website is a good resource for design "
|
||||
"patterns and various integration solutions (Tomcat, JBoss AS, Struts, EJB, "
|
||||
"etc.)."
|
||||
msgstr ""
|
||||
"Hibernateウェブサイトのコミュニティエリアは、デザインパターンやさまざまな統合"
|
||||
"ソリューション (Tomcat, JBoss AS, Struts, EJB, 等)についてのよい情報源で"
|
||||
"す。"
|
||||
|
||||
#: index.docbook:109
|
||||
msgid "If you have questions, use the user forum linked on the Hibernate website. We also provide a JIRA issue trackings system for bug reports and feature requests. If you are interested in the development of Hibernate, join the developer mailing list. If you are interested in translating this documentation into your language, contact us on the developer mailing list."
|
||||
msgstr "質問があればHibernateウェブサイトのユーザフォーラムを活用してください。 またバグレポートとフィーチャリクエストのためJIRA課題追跡システムを用意しています。 Hibernateの開発に興味があれば、開発者メーリングリストに参加してください。 このドキュメントをあなたの国の言葉に翻訳したい場合は、 開発者メーリングリストで私たちにコンタクトを取ってください。"
|
||||
|
||||
#: index.docbook:117
|
||||
msgid "Commercial development support, production support, and training for Hibernate is available through JBoss Inc. (see http://www.hibernate.org/SupportTraining/). Hibernate is a Professional Open Source project and a critical component of the JBoss Enterprise Middleware System (JEMS) suite of products."
|
||||
msgstr "商用開発のサポート、製品のサポート、HibernateのトレーニングはJBoss Inc.が提供しています (http://www.hibernate.org/SupportTraining/を見てください)。 HibernateはProfessional Open Sourceプロジェクト、 そしてJBoss Enterprise Middleware System(JEMS)プロダクトスイートのクリティカルコンポーネントです。"
|
||||
|
||||
msgid "ROLES_OF_TRANSLATORS"
|
||||
msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
|
||||
|
||||
msgid "CREDIT_FOR_TRANSLATORS"
|
||||
msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
|
||||
#. Tag: para
|
||||
#: preface.xml:109
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"If you have questions, use the user forum linked on the Hibernate website. "
|
||||
"We also provide a JIRA issue trackings system for bug reports and feature "
|
||||
"requests. If you are interested in the development of Hibernate, join the "
|
||||
"developer mailing list. If you are interested in translating this "
|
||||
"documentation into your language, contact us on the developer mailing list."
|
||||
msgstr ""
|
||||
"質問があればHibernateウェブサイトのユーザフォーラムを活用してください。 また"
|
||||
"バグレポートとフィーチャリクエストのためJIRA課題追跡システムを用意していま"
|
||||
"す。 Hibernateの開発に興味があれば、開発者メーリングリストに参加してくださ"
|
||||
"い。 このドキュメントをあなたの国の言葉に翻訳したい場合は、 開発者メーリング"
|
||||
"リストで私たちにコンタクトを取ってください。"
|
||||
|
||||
#. Tag: para
|
||||
#: preface.xml:117
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Commercial development support, production support, and training for "
|
||||
"Hibernate is available through JBoss Inc. (see http://www.hibernate.org/"
|
||||
"SupportTraining/). Hibernate is a Professional Open Source project and a "
|
||||
"critical component of the JBoss Enterprise Middleware System (JEMS) suite of "
|
||||
"products."
|
||||
msgstr ""
|
||||
"商用開発のサポート、製品のサポート、HibernateのトレーニングはJBoss Inc.が提供"
|
||||
"しています (http://www.hibernate.org/SupportTraining/を見てください)。 "
|
||||
"HibernateはProfessional Open Sourceプロジェクト、 そしてJBoss Enterprise "
|
||||
"Middleware System(JEMS)プロダクトスイートのクリティカルコンポーネントです。"
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,420 +1,442 @@
|
|||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2007-10-25 07:48+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
#: index.docbook:5
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#. Tag: title
|
||||
#: xml.xml:5
|
||||
#, no-c-format
|
||||
msgid "XML Mapping"
|
||||
msgstr "XMLマッピング"
|
||||
|
||||
#: index.docbook:7
|
||||
msgid "Note that this is an experimental feature in Hibernate 3.0 and is under extremely active development."
|
||||
msgstr "XMLマッピングはHibernate3.0では試験的な機能であり、非常に活動的に開発中です。"
|
||||
#. Tag: emphasis
|
||||
#: xml.xml:7
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Note that this is an experimental feature in Hibernate 3.0 and is under "
|
||||
"extremely active development."
|
||||
msgstr ""
|
||||
"XMLマッピングはHibernate3.0では試験的な機能であり、非常に活動的に開発中です。"
|
||||
|
||||
#: index.docbook:13
|
||||
#. Tag: title
|
||||
#: xml.xml:13
|
||||
#, no-c-format
|
||||
msgid "Working with XML data"
|
||||
msgstr "XMLデータでの作業"
|
||||
|
||||
#: index.docbook:15
|
||||
msgid "Hibernate lets you work with persistent XML data in much the same way you work with persistent POJOs. A parsed XML tree can be thought of as just another way to represent the relational data at the object level, instead of POJOs."
|
||||
msgstr "Hibernateでは永続性のPOJOを使って作業するのとほぼ同じようなやり方で、 永続性のXMLデータを使って作業できます。"
|
||||
#. Tag: para
|
||||
#: xml.xml:15
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Hibernate lets you work with persistent XML data in much the same way you "
|
||||
"work with persistent POJOs. A parsed XML tree can be thought of as just "
|
||||
"another way to represent the relational data at the object level, instead of "
|
||||
"POJOs."
|
||||
msgstr ""
|
||||
"Hibernateでは永続性のPOJOを使って作業するのとほぼ同じようなやり方で、 永続性"
|
||||
"のXMLデータを使って作業できます。"
|
||||
|
||||
#: index.docbook:22
|
||||
msgid "Hibernate supports dom4j as API for manipulating XML trees. You can write queries that retrieve dom4j trees from the database and have any modification you make to the tree automatically synchronized to the database. You can even take an XML document, parse it using dom4j, and write it to the database with any of Hibernate's basic operations: <literal>persist(), saveOrUpdate(), merge(), delete(), replicate()</literal> (merging is not yet supported)."
|
||||
msgstr "HibernateはXMLツリーを操作するためのAPIとしてdom4jをサポートしています。 データベースからdom4jのツリーを復元するクエリを書くことができ、 ツリーに対して行った修正は自動的にデータベースと同期されます。 またXMLドキュメントを取得することができ、dom4jを使ってドキュメントをパースし、 Hibernateの任意の基本操作を使ってデータベースへ書き込むことができます。: つまり、<literal>persist(), saveOrUpdate(), merge(), delete(), replicate()</literal> 操作です(マージはまだサポートしていません)。"
|
||||
#. Tag: para
|
||||
#: xml.xml:22
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Hibernate supports dom4j as API for manipulating XML trees. You can write "
|
||||
"queries that retrieve dom4j trees from the database and have any "
|
||||
"modification you make to the tree automatically synchronized to the "
|
||||
"database. You can even take an XML document, parse it using dom4j, and write "
|
||||
"it to the database with any of Hibernate's basic operations: <literal>persist"
|
||||
"(), saveOrUpdate(), merge(), delete(), replicate()</literal> (merging is not "
|
||||
"yet supported)."
|
||||
msgstr ""
|
||||
"HibernateはXMLツリーを操作するためのAPIとしてdom4jをサポートしています。 デー"
|
||||
"タベースからdom4jのツリーを復元するクエリを書くことができ、 ツリーに対して"
|
||||
"行った修正は自動的にデータベースと同期されます。 またXMLドキュメントを取得す"
|
||||
"ることができ、dom4jを使ってドキュメントをパースし、 Hibernateの任意の基本操作"
|
||||
"を使ってデータベースへ書き込むことができます。: つまり、<literal>persist(), "
|
||||
"saveOrUpdate(), merge(), delete(), replicate()</literal> 操作です(マージはま"
|
||||
"だサポートしていません)。"
|
||||
|
||||
#: index.docbook:32
|
||||
msgid "This feature has many applications including data import/export, externalization of entity data via JMS or SOAP and XSLT-based reporting."
|
||||
msgstr "データのインポート/エクスポート、 JMSによるエンティティデータの外部化やSOAP、XSLTベースのレポートなど、 この機能には多くの用途があります。"
|
||||
#. Tag: para
|
||||
#: xml.xml:32
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"This feature has many applications including data import/export, "
|
||||
"externalization of entity data via JMS or SOAP and XSLT-based reporting."
|
||||
msgstr ""
|
||||
"データのインポート/エクスポート、 JMSによるエンティティデータの外部化やSOAP、"
|
||||
"XSLTベースのレポートなど、 この機能には多くの用途があります。"
|
||||
|
||||
#: index.docbook:37
|
||||
msgid "A single mapping may be used to simultaneously map properties of a class and nodes of an XML document to the database, or, if there is no class to map, it may be used to map just the XML."
|
||||
msgstr "単一のマッピングは、クラスのプロパティとXMLドキュメントのノードを 同時にデータベースへマッピングするために使うことができます。 またマッピングするクラスがなければ、 XMLだけをマッピングするために使うことができます。"
|
||||
#. Tag: para
|
||||
#: xml.xml:37
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"A single mapping may be used to simultaneously map properties of a class and "
|
||||
"nodes of an XML document to the database, or, if there is no class to map, "
|
||||
"it may be used to map just the XML."
|
||||
msgstr ""
|
||||
"単一のマッピングは、クラスのプロパティとXMLドキュメントのノードを 同時にデー"
|
||||
"タベースへマッピングするために使うことができます。 またマッピングするクラスが"
|
||||
"なければ、 XMLだけをマッピングするために使うことができます。"
|
||||
|
||||
#: index.docbook:44
|
||||
#. Tag: title
|
||||
#: xml.xml:44
|
||||
#, no-c-format
|
||||
msgid "Specifying XML and class mapping together"
|
||||
msgstr "XMLとクラスのマッピングを同時に指定する"
|
||||
|
||||
#: index.docbook:46
|
||||
#. Tag: para
|
||||
#: xml.xml:46
|
||||
#, no-c-format
|
||||
msgid "Here is an example of mapping a POJO and XML simultaneously:"
|
||||
msgstr "これはPOJOとXMLを同時にマッピングする例です。:"
|
||||
|
||||
#: index.docbook:50
|
||||
#. Tag: programlisting
|
||||
#: xml.xml:50
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<class name=\"Account\" \n"
|
||||
" table=\"ACCOUNTS\" \n"
|
||||
" node=\"account\">\n"
|
||||
" \n"
|
||||
" <id name=\"accountId\" \n"
|
||||
" column=\"ACCOUNT_ID\" \n"
|
||||
" node=\"@id\"/>\n"
|
||||
" \n"
|
||||
" <many-to-one name=\"customer\" \n"
|
||||
" column=\"CUSTOMER_ID\" \n"
|
||||
" node=\"customer/@id\" \n"
|
||||
" embed-xml=\"false\"/>\n"
|
||||
" \n"
|
||||
" <property name=\"balance\" \n"
|
||||
" column=\"BALANCE\" \n"
|
||||
" node=\"balance\"/>\n"
|
||||
" \n"
|
||||
" ...\n"
|
||||
" \n"
|
||||
"</class>]]>"
|
||||
"<![CDATA[<class name=\"Account\" \n"
|
||||
" table=\"ACCOUNTS\" \n"
|
||||
" node=\"account\">\n"
|
||||
" \n"
|
||||
" <id name=\"accountId\" \n"
|
||||
" column=\"ACCOUNT_ID\" \n"
|
||||
" node=\"@id\"/>\n"
|
||||
" \n"
|
||||
" <many-to-one name=\"customer\" \n"
|
||||
" column=\"CUSTOMER_ID\" \n"
|
||||
" node=\"customer/@id\" \n"
|
||||
" embed-xml=\"false\"/>\n"
|
||||
" \n"
|
||||
" <property name=\"balance\" \n"
|
||||
" column=\"BALANCE\" \n"
|
||||
" node=\"balance\"/>\n"
|
||||
" \n"
|
||||
" ...\n"
|
||||
" \n"
|
||||
"</class>]]>"
|
||||
msgstr ""
|
||||
"<![CDATA[<class name=\"Account\"
\n"
|
||||
" table=\"ACCOUNTS\"
\n"
|
||||
" node=\"account\">
\n"
|
||||
"
\n"
|
||||
" <id name=\"accountId\"
\n"
|
||||
" column=\"ACCOUNT_ID\"
\n"
|
||||
" node=\"@id\"/>
\n"
|
||||
"
\n"
|
||||
" <many-to-one name=\"customer\"
\n"
|
||||
" column=\"CUSTOMER_ID\"
\n"
|
||||
" node=\"customer/@id\"
\n"
|
||||
" embed-xml=\"false\"/>
\n"
|
||||
"
\n"
|
||||
" <property name=\"balance\"
\n"
|
||||
" column=\"BALANCE\"
\n"
|
||||
" node=\"balance\"/>
\n"
|
||||
"
\n"
|
||||
" ...
\n"
|
||||
"
\n"
|
||||
"</class>]]>"
|
||||
|
||||
#: index.docbook:54
|
||||
#. Tag: title
|
||||
#: xml.xml:54
|
||||
#, no-c-format
|
||||
msgid "Specifying only an XML mapping"
|
||||
msgstr "XMLマッピングだけを指定する"
|
||||
|
||||
#: index.docbook:56
|
||||
#. Tag: para
|
||||
#: xml.xml:56
|
||||
#, no-c-format
|
||||
msgid "Here is an example where there is no POJO class:"
|
||||
msgstr "これはPOJOクラスがないマッピングの例です。:"
|
||||
|
||||
#: index.docbook:60
|
||||
#. Tag: programlisting
|
||||
#: xml.xml:60
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<class entity-name=\"Account\" \n"
|
||||
" table=\"ACCOUNTS\" \n"
|
||||
" node=\"account\">\n"
|
||||
" \n"
|
||||
" <id name=\"id\" \n"
|
||||
" column=\"ACCOUNT_ID\" \n"
|
||||
" node=\"@id\" \n"
|
||||
" type=\"string\"/>\n"
|
||||
" \n"
|
||||
" <many-to-one name=\"customerId\" \n"
|
||||
" column=\"CUSTOMER_ID\" \n"
|
||||
" node=\"customer/@id\" \n"
|
||||
" embed-xml=\"false\" \n"
|
||||
" entity-name=\"Customer\"/>\n"
|
||||
" \n"
|
||||
" <property name=\"balance\" \n"
|
||||
" column=\"BALANCE\" \n"
|
||||
" node=\"balance\" \n"
|
||||
" type=\"big_decimal\"/>\n"
|
||||
" \n"
|
||||
" ...\n"
|
||||
" \n"
|
||||
"</class>]]>"
|
||||
"<![CDATA[<class entity-name=\"Account\" \n"
|
||||
" table=\"ACCOUNTS\" \n"
|
||||
" node=\"account\">\n"
|
||||
" \n"
|
||||
" <id name=\"id\" \n"
|
||||
" column=\"ACCOUNT_ID\" \n"
|
||||
" node=\"@id\" \n"
|
||||
" type=\"string\"/>\n"
|
||||
" \n"
|
||||
" <many-to-one name=\"customerId\" \n"
|
||||
" column=\"CUSTOMER_ID\" \n"
|
||||
" node=\"customer/@id\" \n"
|
||||
" embed-xml=\"false\" \n"
|
||||
" entity-name=\"Customer\"/>\n"
|
||||
" \n"
|
||||
" <property name=\"balance\" \n"
|
||||
" column=\"BALANCE\" \n"
|
||||
" node=\"balance\" \n"
|
||||
" type=\"big_decimal\"/>\n"
|
||||
" \n"
|
||||
" ...\n"
|
||||
" \n"
|
||||
"</class>]]>"
|
||||
msgstr ""
|
||||
"<![CDATA[<class entity-name=\"Account\"
\n"
|
||||
" table=\"ACCOUNTS\"
\n"
|
||||
" node=\"account\">
\n"
|
||||
"
\n"
|
||||
" <id name=\"id\"
\n"
|
||||
" column=\"ACCOUNT_ID\"
\n"
|
||||
" node=\"@id\"
\n"
|
||||
" type=\"string\"/>
\n"
|
||||
"
\n"
|
||||
" <many-to-one name=\"customerId\"
\n"
|
||||
" column=\"CUSTOMER_ID\"
\n"
|
||||
" node=\"customer/@id\"
\n"
|
||||
" embed-xml=\"false\"
\n"
|
||||
" entity-name=\"Customer\"/>
\n"
|
||||
"
\n"
|
||||
" <property name=\"balance\"
\n"
|
||||
" column=\"BALANCE\"
\n"
|
||||
" node=\"balance\"
\n"
|
||||
" type=\"big_decimal\"/>
\n"
|
||||
"
\n"
|
||||
" ...
\n"
|
||||
"
\n"
|
||||
"</class>]]>"
|
||||
|
||||
#: index.docbook:62
|
||||
msgid "This mapping allows you to access the data as a dom4j tree, or as a graph of property name/value pairs (java <literal>Map</literal>s). The property names are purely logical constructs that may be referred to in HQL queries."
|
||||
msgstr "このマッピングにより、dom4jツリーか、 プロパティ名/値の組のグラフ(javaの <literal>Map</literal>)として データにアクセスできます。 プロパティの名前は、HQLクエリー内で参照できる純粋な論理構造です。"
|
||||
#. Tag: para
|
||||
#: xml.xml:62
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"This mapping allows you to access the data as a dom4j tree, or as a graph of "
|
||||
"property name/value pairs (java <literal>Map</literal>s). The property names "
|
||||
"are purely logical constructs that may be referred to in HQL queries."
|
||||
msgstr ""
|
||||
"このマッピングにより、dom4jツリーか、 プロパティ名/値の組のグラフ(javaの "
|
||||
"<literal>Map</literal>)として データにアクセスできます。 プロパティの名前"
|
||||
"は、HQLクエリー内で参照できる純粋な論理構造です。"
|
||||
|
||||
#: index.docbook:73
|
||||
#. Tag: title
|
||||
#: xml.xml:73
|
||||
#, no-c-format
|
||||
msgid "XML mapping metadata"
|
||||
msgstr "XMLマッピングのメタデータ"
|
||||
|
||||
#: index.docbook:75
|
||||
msgid "Many Hibernate mapping elements accept the <literal>node</literal> attribute. This let's you specify the name of an XML attribute or element that holds the property or entity data. The format of the <literal>node</literal> attribute must be one of the following:"
|
||||
msgstr "多くのHibernateのマッピング要素は <literal>node</literal> 属性が使用できます。 これによりXML属性の名前やプロパティやエンティティデータを保持する要素を指定できます。 <literal>node</literal> 属性のフォーマットは以下の中の1つでなければなりません。:"
|
||||
#. Tag: para
|
||||
#: xml.xml:75
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Many Hibernate mapping elements accept the <literal>node</literal> "
|
||||
"attribute. This let's you specify the name of an XML attribute or element "
|
||||
"that holds the property or entity data. The format of the <literal>node</"
|
||||
"literal> attribute must be one of the following:"
|
||||
msgstr ""
|
||||
"多くのHibernateのマッピング要素は <literal>node</literal> 属性が使用できま"
|
||||
"す。 これによりXML属性の名前やプロパティやエンティティデータを保持する要素を"
|
||||
"指定できます。 <literal>node</literal> 属性のフォーマットは以下の中の1つでな"
|
||||
"ければなりません。:"
|
||||
|
||||
#: index.docbook:84
|
||||
#. Tag: para
|
||||
#: xml.xml:84
|
||||
#, no-c-format
|
||||
msgid "<literal>\"element-name\"</literal> - map to the named XML element"
|
||||
msgstr "<literal>\"element-name\"</literal> - 指定したXML要素へマッピングします"
|
||||
msgstr ""
|
||||
"<literal>\"element-name\"</literal> - 指定したXML要素へマッピングします"
|
||||
|
||||
#: index.docbook:87
|
||||
#. Tag: para
|
||||
#: xml.xml:87
|
||||
#, no-c-format
|
||||
msgid "<literal>\"@attribute-name\"</literal> - map to the named XML attribute"
|
||||
msgstr "<literal>\"@attribute-name\"</literal> - 指定したXML属性へマッピングします"
|
||||
msgstr ""
|
||||
"<literal>\"@attribute-name\"</literal> - 指定したXML属性へマッピングします"
|
||||
|
||||
#: index.docbook:90
|
||||
#. Tag: para
|
||||
#: xml.xml:90
|
||||
#, no-c-format
|
||||
msgid "<literal>\".\"</literal> - map to the parent element"
|
||||
msgstr "<literal>\".\"</literal> - 親要素へマッピングします"
|
||||
|
||||
#: index.docbook:93
|
||||
msgid "<literal>\"element-name/@attribute-name\"</literal> - map to the named attribute of the named element"
|
||||
msgstr "<literal>\"element-name/@attribute-name\"</literal> - 指定したエレメントの指定した属性へマッピングします"
|
||||
|
||||
#: index.docbook:100
|
||||
msgid "For collections and single valued associations, there is an additional <literal>embed-xml</literal> attribute. If <literal>embed-xml=\"true\"</literal>, the default, the XML tree for the associated entity (or collection of value type) will be embedded directly in the XML tree for the entity that owns the association. Otherwise, if <literal>embed-xml=\"false\"</literal>, then only the referenced identifier value will appear in the XML for single point associations and collections will simply not appear at all."
|
||||
msgstr "コレクションと単一の値の関連に対して、 おまけの <literal>embed-xml</literal> 属性があります。 デフォルトの <literal>embed-xml=\"true\"</literal> と設定した場合、 関連するエンティティ(値型のコレクション)のXMLツリーは、 直接関連を所有するエンティティのXMLツリー内に埋め込まれます。 反対に、<literal>embed-xml=\"false\"</literal> と設定した場合、 参照される識別子の値だけが多重度1側の関連に対するXMLに現れ、 単純にコレクションはまったく現れなくなります。"
|
||||
|
||||
#: index.docbook:110
|
||||
msgid "You should be careful not to leave <literal>embed-xml=\"true\"</literal> for too many associations, since XML does not deal well with circularity!"
|
||||
msgstr "あまりに多くの関連に対して <literal>embed-xml=\"true\"</literal> としたままにするのは注意すべきです。 XMLは循環をうまく扱えません。"
|
||||
|
||||
#: index.docbook:115
|
||||
#. Tag: para
|
||||
#: xml.xml:93
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<class name=\"Customer\" \n"
|
||||
" table=\"CUSTOMER\" \n"
|
||||
" node=\"customer\">\n"
|
||||
" \n"
|
||||
" <id name=\"id\" \n"
|
||||
" column=\"CUST_ID\" \n"
|
||||
" node=\"@id\"/>\n"
|
||||
" \n"
|
||||
" <map name=\"accounts\" \n"
|
||||
" node=\".\" \n"
|
||||
" embed-xml=\"true\">\n"
|
||||
" <key column=\"CUSTOMER_ID\" \n"
|
||||
" not-null=\"true\"/>\n"
|
||||
" <map-key column=\"SHORT_DESC\" \n"
|
||||
" node=\"@short-desc\" \n"
|
||||
" type=\"string\"/>\n"
|
||||
" <one-to-many entity-name=\"Account\"\n"
|
||||
" embed-xml=\"false\" \n"
|
||||
" node=\"account\"/>\n"
|
||||
" </map>\n"
|
||||
" \n"
|
||||
" <component name=\"name\" \n"
|
||||
" node=\"name\">\n"
|
||||
" <property name=\"firstName\" \n"
|
||||
" node=\"first-name\"/>\n"
|
||||
" <property name=\"initial\" \n"
|
||||
" node=\"initial\"/>\n"
|
||||
" <property name=\"lastName\" \n"
|
||||
" node=\"last-name\"/>\n"
|
||||
" </component>\n"
|
||||
" \n"
|
||||
" ...\n"
|
||||
" \n"
|
||||
"</class>]]>"
|
||||
"<literal>\"element-name/@attribute-name\"</literal> - map to the named "
|
||||
"attribute of the named element"
|
||||
msgstr ""
|
||||
"<![CDATA[<class name=\"Customer\"
\n"
|
||||
" table=\"CUSTOMER\"
\n"
|
||||
" node=\"customer\">
\n"
|
||||
"
\n"
|
||||
" <id name=\"id\"
\n"
|
||||
" column=\"CUST_ID\"
\n"
|
||||
" node=\"@id\"/>
\n"
|
||||
"
\n"
|
||||
" <map name=\"accounts\"
\n"
|
||||
" node=\".\"
\n"
|
||||
" embed-xml=\"true\">
\n"
|
||||
" <key column=\"CUSTOMER_ID\"
\n"
|
||||
" not-null=\"true\"/>
\n"
|
||||
" <map-key column=\"SHORT_DESC\"
\n"
|
||||
" node=\"@short-desc\"
\n"
|
||||
" type=\"string\"/>
\n"
|
||||
" <one-to-many entity-name=\"Account\"
\n"
|
||||
" embed-xml=\"false\"
\n"
|
||||
" node=\"account\"/>
\n"
|
||||
" </map>
\n"
|
||||
"
\n"
|
||||
" <component name=\"name\"
\n"
|
||||
" node=\"name\">
\n"
|
||||
" <property name=\"firstName\"
\n"
|
||||
" node=\"first-name\"/>
\n"
|
||||
" <property name=\"initial\"
\n"
|
||||
" node=\"initial\"/>
\n"
|
||||
" <property name=\"lastName\"
\n"
|
||||
" node=\"last-name\"/>
\n"
|
||||
" </component>
\n"
|
||||
"
\n"
|
||||
" ...
\n"
|
||||
"
\n"
|
||||
"</class>]]>"
|
||||
"<literal>\"element-name/@attribute-name\"</literal> - 指定したエレメントの指"
|
||||
"定した属性へマッピングします"
|
||||
|
||||
#: index.docbook:117
|
||||
msgid "in this case, we have decided to embed the collection of account ids, but not the actual account data. The following HQL query:"
|
||||
msgstr "この例では、実際のaccountのデータではなく、 accountのidのコレクションを埋め込むことにしました。 続きのHQLクエリです:"
|
||||
#. Tag: para
|
||||
#: xml.xml:100
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"For collections and single valued associations, there is an additional "
|
||||
"<literal>embed-xml</literal> attribute. If <literal>embed-xml=\"true\"</"
|
||||
"literal>, the default, the XML tree for the associated entity (or collection "
|
||||
"of value type) will be embedded directly in the XML tree for the entity that "
|
||||
"owns the association. Otherwise, if <literal>embed-xml=\"false\"</literal>, "
|
||||
"then only the referenced identifier value will appear in the XML for single "
|
||||
"point associations and collections will simply not appear at all."
|
||||
msgstr ""
|
||||
"コレクションと単一の値の関連に対して、 おまけの <literal>embed-xml</literal> "
|
||||
"属性があります。 デフォルトの <literal>embed-xml=\"true\"</literal> と設定し"
|
||||
"た場合、 関連するエンティティ(値型のコレクション)のXMLツリーは、 直接関連を所"
|
||||
"有するエンティティのXMLツリー内に埋め込まれます。 反対に、<literal>embed-xml="
|
||||
"\"false\"</literal> と設定した場合、 参照される識別子の値だけが多重度1側の関"
|
||||
"連に対するXMLに現れ、 単純にコレクションはまったく現れなくなります。"
|
||||
|
||||
#: index.docbook:122
|
||||
msgid "<![CDATA[from Customer c left join fetch c.accounts where c.lastName like :lastName]]>"
|
||||
msgstr "<![CDATA[from Customer c left join fetch c.accounts where c.lastName like :lastName]]>"
|
||||
#. Tag: para
|
||||
#: xml.xml:110
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"You should be careful not to leave <literal>embed-xml=\"true\"</literal> for "
|
||||
"too many associations, since XML does not deal well with circularity!"
|
||||
msgstr ""
|
||||
"あまりに多くの関連に対して <literal>embed-xml=\"true\"</literal> としたままに"
|
||||
"するのは注意すべきです。 XMLは循環をうまく扱えません。"
|
||||
|
||||
#: index.docbook:124
|
||||
#. Tag: programlisting
|
||||
#: xml.xml:115
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<class name=\"Customer\" \n"
|
||||
" table=\"CUSTOMER\" \n"
|
||||
" node=\"customer\">\n"
|
||||
" \n"
|
||||
" <id name=\"id\" \n"
|
||||
" column=\"CUST_ID\" \n"
|
||||
" node=\"@id\"/>\n"
|
||||
" \n"
|
||||
" <map name=\"accounts\" \n"
|
||||
" node=\".\" \n"
|
||||
" embed-xml=\"true\">\n"
|
||||
" <key column=\"CUSTOMER_ID\" \n"
|
||||
" not-null=\"true\"/>\n"
|
||||
" <map-key column=\"SHORT_DESC\" \n"
|
||||
" node=\"@short-desc\" \n"
|
||||
" type=\"string\"/>\n"
|
||||
" <one-to-many entity-name=\"Account\"\n"
|
||||
" embed-xml=\"false\" \n"
|
||||
" node=\"account\"/>\n"
|
||||
" </map>\n"
|
||||
" \n"
|
||||
" <component name=\"name\" \n"
|
||||
" node=\"name\">\n"
|
||||
" <property name=\"firstName\" \n"
|
||||
" node=\"first-name\"/>\n"
|
||||
" <property name=\"initial\" \n"
|
||||
" node=\"initial\"/>\n"
|
||||
" <property name=\"lastName\" \n"
|
||||
" node=\"last-name\"/>\n"
|
||||
" </component>\n"
|
||||
" \n"
|
||||
" ...\n"
|
||||
" \n"
|
||||
"</class>]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: para
|
||||
#: xml.xml:117
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"in this case, we have decided to embed the collection of account ids, but "
|
||||
"not the actual account data. The following HQL query:"
|
||||
msgstr ""
|
||||
"この例では、実際のaccountのデータではなく、 accountのidのコレクションを埋め込"
|
||||
"むことにしました。 続きのHQLクエリです:"
|
||||
|
||||
#. Tag: programlisting
|
||||
#: xml.xml:122
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[from Customer c left join fetch c.accounts where c.lastName like :"
|
||||
"lastName]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: para
|
||||
#: xml.xml:124
|
||||
#, no-c-format
|
||||
msgid "Would return datasets such as this:"
|
||||
msgstr "このようなデータセットを返すでしょう"
|
||||
|
||||
#: index.docbook:128
|
||||
#. Tag: programlisting
|
||||
#: xml.xml:128
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<customer id=\"123456789\">\n"
|
||||
" <account short-desc=\"Savings\">987632567</account>\n"
|
||||
" <account short-desc=\"Credit Card\">985612323</account>\n"
|
||||
" <name>\n"
|
||||
" <first-name>Gavin</first-name>\n"
|
||||
" <initial>A</initial>\n"
|
||||
" <last-name>King</last-name>\n"
|
||||
" </name>\n"
|
||||
" ...\n"
|
||||
"</customer>]]>"
|
||||
"<![CDATA[<customer id=\"123456789\">\n"
|
||||
" <account short-desc=\"Savings\">987632567</account>\n"
|
||||
" <account short-desc=\"Credit Card\">985612323</account>\n"
|
||||
" <name>\n"
|
||||
" <first-name>Gavin</first-name>\n"
|
||||
" <initial>A</initial>\n"
|
||||
" <last-name>King</last-name>\n"
|
||||
" </name>\n"
|
||||
" ...\n"
|
||||
"</customer>]]>"
|
||||
msgstr ""
|
||||
"<![CDATA[<customer id=\"123456789\">
\n"
|
||||
" <account short-desc=\"Savings\">987632567</account>
\n"
|
||||
" <account short-desc=\"Credit Card\">985612323</account>
\n"
|
||||
" <name>
\n"
|
||||
" <first-name>Gavin</first-name>
\n"
|
||||
" <initial>A</initial>
\n"
|
||||
" <last-name>King</last-name>
\n"
|
||||
" </name>
\n"
|
||||
" ...
\n"
|
||||
"</customer>]]>"
|
||||
|
||||
#: index.docbook:130
|
||||
msgid "If you set <literal>embed-xml=\"true\"</literal> on the <literal><one-to-many></literal> mapping, the data might look more like this:"
|
||||
msgstr "<literal><one-to-many></literal> マッピングで <literal>embed-xml=\"true\"</literal> と設定した場合、 データはこのようになるでしょう。"
|
||||
|
||||
#: index.docbook:135
|
||||
#. Tag: para
|
||||
#: xml.xml:130
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<customer id=\"123456789\">\n"
|
||||
" <account id=\"987632567\" short-desc=\"Savings\">\n"
|
||||
" <customer id=\"123456789\"/>\n"
|
||||
" <balance>100.29</balance>\n"
|
||||
" </account>\n"
|
||||
" <account id=\"985612323\" short-desc=\"Credit Card\">\n"
|
||||
" <customer id=\"123456789\"/>\n"
|
||||
" <balance>-2370.34</balance>\n"
|
||||
" </account>\n"
|
||||
" <name>\n"
|
||||
" <first-name>Gavin</first-name>\n"
|
||||
" <initial>A</initial>\n"
|
||||
" <last-name>King</last-name>\n"
|
||||
" </name>\n"
|
||||
" ...\n"
|
||||
"</customer>]]>"
|
||||
"If you set <literal>embed-xml=\"true\"</literal> on the <literal><one-to-"
|
||||
"many></literal> mapping, the data might look more like this:"
|
||||
msgstr ""
|
||||
"<![CDATA[<customer id=\"123456789\">
\n"
|
||||
" <account id=\"987632567\" short-desc=\"Savings\">
\n"
|
||||
" <customer id=\"123456789\"/>
\n"
|
||||
" <balance>100.29</balance>
\n"
|
||||
" </account>
\n"
|
||||
" <account id=\"985612323\" short-desc=\"Credit Card\">
\n"
|
||||
" <customer id=\"123456789\"/>
\n"
|
||||
" <balance>-2370.34</balance>
\n"
|
||||
" </account>
\n"
|
||||
" <name>
\n"
|
||||
" <first-name>Gavin</first-name>
\n"
|
||||
" <initial>A</initial>
\n"
|
||||
" <last-name>King</last-name>
\n"
|
||||
" </name>
\n"
|
||||
" ...
\n"
|
||||
"</customer>]]>"
|
||||
"<literal><one-to-many></literal> マッピングで <literal>embed-xml=\"true"
|
||||
"\"</literal> と設定した場合、 データはこのようになるでしょう。"
|
||||
|
||||
#: index.docbook:141
|
||||
#. Tag: programlisting
|
||||
#: xml.xml:135
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[<customer id=\"123456789\">\n"
|
||||
" <account id=\"987632567\" short-desc=\"Savings\">\n"
|
||||
" <customer id=\"123456789\"/>\n"
|
||||
" <balance>100.29</balance>\n"
|
||||
" </account>\n"
|
||||
" <account id=\"985612323\" short-desc=\"Credit Card\">\n"
|
||||
" <customer id=\"123456789\"/>\n"
|
||||
" <balance>-2370.34</balance>\n"
|
||||
" </account>\n"
|
||||
" <name>\n"
|
||||
" <first-name>Gavin</first-name>\n"
|
||||
" <initial>A</initial>\n"
|
||||
" <last-name>King</last-name>\n"
|
||||
" </name>\n"
|
||||
" ...\n"
|
||||
"</customer>]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: title
|
||||
#: xml.xml:141
|
||||
#, no-c-format
|
||||
msgid "Manipulating XML data"
|
||||
msgstr "XMLデータを扱う"
|
||||
|
||||
#: index.docbook:143
|
||||
msgid "Let's rearead and update XML documents in the application. We do this by obtaining a dom4j session:"
|
||||
msgstr "XMLドキュメントを、アプリケーション内で再読み込みや更新をしてみましょう。 以下ではdom4jのセッションを取得することで行います。:"
|
||||
|
||||
#: index.docbook:148
|
||||
#. Tag: para
|
||||
#: xml.xml:143
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Document doc = ....;\n"
|
||||
" \n"
|
||||
"Session session = factory.openSession();\n"
|
||||
"Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
"\n"
|
||||
"List results = dom4jSession\n"
|
||||
" .createQuery(\"from Customer c left join fetch c.accounts where c.lastName like :lastName\")\n"
|
||||
" .list();\n"
|
||||
"for ( int i=0; i<results.size(); i++ ) {\n"
|
||||
" //add the customer data to the XML document\n"
|
||||
" Element customer = (Element) results.get(i);\n"
|
||||
" doc.add(customer);\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
"Let's rearead and update XML documents in the application. We do this by "
|
||||
"obtaining a dom4j session:"
|
||||
msgstr ""
|
||||
"<![CDATA[Document doc = ....;
\n"
|
||||
"
\n"
|
||||
"Session session = factory.openSession();
\n"
|
||||
"Session dom4jSession = session.getSession(EntityMode.DOM4J);
\n"
|
||||
"Transaction tx = session.beginTransaction();
\n"
|
||||
"
\n"
|
||||
"List results = dom4jSession
\n"
|
||||
" .createQuery(\"from Customer c left join fetch c.accounts where c.lastName like :lastName\")
\n"
|
||||
" .list();
\n"
|
||||
"for ( int i=0; i<results.size(); i++ ) {
\n"
|
||||
" //add the customer data to the XML document
\n"
|
||||
" Element customer = (Element) results.get(i);
\n"
|
||||
" doc.getRootElement().add(customer);
\n"
|
||||
"}
\n"
|
||||
"
\n"
|
||||
"tx.commit();
\n"
|
||||
"session.close();]]>"
|
||||
"XMLドキュメントを、アプリケーション内で再読み込みや更新をしてみましょう。 以"
|
||||
"下ではdom4jのセッションを取得することで行います。:"
|
||||
|
||||
#: index.docbook:150
|
||||
#. Tag: programlisting
|
||||
#: xml.xml:148
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Session session = factory.openSession();\n"
|
||||
"Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
"\n"
|
||||
"Element cust = (Element) dom4jSession.get(\"Customer\", customerId);\n"
|
||||
"for ( int i=0; i<results.size(); i++ ) {\n"
|
||||
" Element customer = (Element) results.get(i);\n"
|
||||
" //change the customer name in the XML and database\n"
|
||||
" Element name = customer.element(\"name\");\n"
|
||||
" name.element(\"first-name\").setText(firstName);\n"
|
||||
" name.element(\"initial\").setText(initial);\n"
|
||||
" name.element(\"last-name\").setText(lastName);\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
"<![CDATA[Document doc = ....;\n"
|
||||
" \n"
|
||||
"Session session = factory.openSession();\n"
|
||||
"Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
"\n"
|
||||
"List results = dom4jSession\n"
|
||||
" .createQuery(\"from Customer c left join fetch c.accounts where c."
|
||||
"lastName like :lastName\")\n"
|
||||
" .list();\n"
|
||||
"for ( int i=0; i<results.size(); i++ ) {\n"
|
||||
" //add the customer data to the XML document\n"
|
||||
" Element customer = (Element) results.get(i);\n"
|
||||
" doc.add(customer);\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
msgstr ""
|
||||
"<![CDATA[Session session = factory.openSession();
\n"
|
||||
"Session dom4jSession = session.getSession(EntityMode.DOM4J);
\n"
|
||||
"Transaction tx = session.beginTransaction();
\n"
|
||||
"
\n"
|
||||
"Element cust = (Element) dom4jSession.get(\"Customer\", customerId);
\n"
|
||||
"for ( int i=0; i<results.size(); i++ ) {
\n"
|
||||
" Element customer = (Element) results.get(i);
\n"
|
||||
" //change the customer name in the XML and database
\n"
|
||||
" Element name = customer.element(\"name\");
\n"
|
||||
" name.element(\"first-name\").setText(firstName);
\n"
|
||||
" name.element(\"initial\").setText(initial);
\n"
|
||||
" name.element(\"last-name\").setText(lastName);
\n"
|
||||
"}
\n"
|
||||
"
\n"
|
||||
"tx.commit();
\n"
|
||||
"session.close();]]>"
|
||||
|
||||
#: index.docbook:152
|
||||
msgid "It is extremely useful to combine this feature with Hibernate's <literal>replicate()</literal> operation to implement XML-based data import/export."
|
||||
msgstr "XMLベースのデータのインポート/エクスポートを実装するために、 Hibernateの <literal>replicate()</literal> 操作をこの機能を結びつけるのは 極めて有効です。"
|
||||
|
||||
msgid "ROLES_OF_TRANSLATORS"
|
||||
msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
|
||||
|
||||
msgid "CREDIT_FOR_TRANSLATORS"
|
||||
msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
|
||||
#. Tag: programlisting
|
||||
#: xml.xml:150
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"<![CDATA[Session session = factory.openSession();\n"
|
||||
"Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
|
||||
"Transaction tx = session.beginTransaction();\n"
|
||||
"\n"
|
||||
"Element cust = (Element) dom4jSession.get(\"Customer\", customerId);\n"
|
||||
"for ( int i=0; i<results.size(); i++ ) {\n"
|
||||
" Element customer = (Element) results.get(i);\n"
|
||||
" //change the customer name in the XML and database\n"
|
||||
" Element name = customer.element(\"name\");\n"
|
||||
" name.element(\"first-name\").setText(firstName);\n"
|
||||
" name.element(\"initial\").setText(initial);\n"
|
||||
" name.element(\"last-name\").setText(lastName);\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"tx.commit();\n"
|
||||
"session.close();]]>"
|
||||
msgstr ""
|
||||
|
||||
#. Tag: para
|
||||
#: xml.xml:152
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"It is extremely useful to combine this feature with Hibernate's "
|
||||
"<literal>replicate()</literal> operation to implement XML-based data import/"
|
||||
"export."
|
||||
msgstr ""
|
||||
"XMLベースのデータのインポート/エクスポートを実装するために、 Hibernateの "
|
||||
"<literal>replicate()</literal> 操作をこの機能を結びつけるのは 極めて有効で"
|
||||
"す。"
|
||||
|
|
Loading…
Reference in New Issue