Hibernate example source code file (basic_mapping.po)
This example Hibernate source code file (basic_mapping.po) is included in the DevDaily.com
"Java Source Code
Warehouse " project. The intent of this project is to help you "Learn Java by Example " TM .
The Hibernate basic_mapping.po source code
# translation of basic_mapping.po to
# Xi Huang <xhuang@redhat.com>, 2006.
# Xi HUANG <xhuang@redhat.com>, 2007, 2009.
# translation of Collection_Mapping.po to
msgid ""
msgstr ""
"Project-Id-Version: basic_mapping\n"
"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
"POT-Creation-Date: 2011-01-21 21:18+0000\n"
"PO-Revision-Date: 2010-03-15 08:56+1000\n"
"Last-Translator: Xi HUANG <xhuang@redhat.com>\n"
"Language-Team: <en@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
#. Tag: title
#: basic_mapping.xml:31
#, no-c-format
msgid "Basic O/R Mapping"
msgstr "对象/关系数æ®åº“æ˜ å°„åŸºç¡€ï¼ˆBasic O/R Mapping)"
#. Tag: title
#: basic_mapping.xml:34
#, no-c-format
msgid "Mapping declaration"
msgstr "æ˜ å°„å®šä¹‰ï¼ˆMapping declaration)"
#. Tag: para
#: basic_mapping.xml:36
#, no-c-format
msgid "Object/relational mappings can be defined in three approaches:"
msgstr ""
#. Tag: para
#: basic_mapping.xml:41
#, no-c-format
msgid "using Java 5 annotations (via the Java Persistence 2 annotations)"
msgstr ""
#. Tag: para
#: basic_mapping.xml:46
#, no-c-format
msgid "using JPA 2 XML deployment descriptors (described in chapter XXX)"
msgstr ""
#. Tag: para
#: basic_mapping.xml:51
#, no-c-format
msgid "using the Hibernate legacy XML files approach known as hbm.xml"
msgstr ""
#. Tag: para
#: basic_mapping.xml:56
#, no-c-format
msgid ""
"Annotations are split in two categories, the logical mapping annotations "
"(describing the object model, the association between two entities etc.) and "
"the physical mapping annotations (describing the physical schema, tables, "
"columns, indexes, etc). We will mix annotations from both categories in the "
"following code examples."
msgstr ""
#. Tag: para
#: basic_mapping.xml:62
#, no-c-format
msgid ""
"JPA annotations are in the <literal>javax.persistence.* package. "
"Hibernate specific extensions are in <literal>org.hibernate.annotations.*"
#. Tag: para
#: basic_mapping.xml:86
#, fuzzy, no-c-format
msgid ""
"We will now discuss the concepts of the mapping documents (both annotations "
"and XML). We will only describe, however, the document elements and "
"attributes that are used by Hibernate at runtime. The mapping document also "
"contains some extra optional attributes and elements that affect the "
"database schemas exported by the schema export tool (for example, the "
"<literal> not-null attribute)."
msgstr ""
"æˆ‘ä»¬çŽ°åœ¨å¼€å§‹è®¨è®ºæ˜ å°„æ–‡æ¡£çš„å†…å®¹ã€‚æˆ‘ä»¬åªæè¿° Hibernate 在è¿è¡Œæ—¶ç”¨åˆ°çš„æ–‡æ¡£å…ƒç´ å’Œ"
"å±žæ€§ã€‚æ˜ å°„æ–‡æ¡£è¿˜åŒ…æ‹¬ä¸€äº›é¢å¤–çš„å¯é€‰å±žæ€§å’Œå…ƒç´ ,它们在使用 schema 导出工具的时"
"候会影å“导出的数æ®åº“ schema 结果(比如,<literal>not-null 属性)。"
#. Tag: title
#: basic_mapping.xml:94
#, fuzzy, no-c-format
msgid "Entity"
msgstr "identity"
#. Tag: para
#: basic_mapping.xml:96
#, no-c-format
msgid ""
"An entity is a regular Java object (aka POJO) which will be persisted by "
"Hibernate."
msgstr ""
#. Tag: para
#: basic_mapping.xml:99
#, no-c-format
msgid ""
"To mark an object as an entity in annotations, use the <classname>@Entity lets you define the table the entity will be "
"persisted into. If undefined, the table name is the unqualified class name "
"of the entity. You can also optionally define the catalog, the schema as "
"well as unique constraints on the table."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:112
#, no-c-format
msgid ""
"@Entity\n"
"@Table(name=\"TBL_FLIGHT\", \n"
" schema=\"AIR_COMMAND\", \n"
" uniqueConstraints=\n"
" @UniqueConstraint(\n"
" name=\"flight_number\", \n"
" columnNames={\"comp_prefix\", \"flight_number\"} ) )\n"
"public class Flight implements Serializable {\n"
" @Column(name=\"comp_prefix\")\n"
" public String getCompagnyPrefix() { return companyPrefix; }\n"
"\n"
" @Column(name=\"flight_number\")\n"
" public String getNumber() { return number; }\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:114
#, no-c-format
msgid ""
"The constraint name is optional (generated if left undefined). The column "
"names composing the constraint correspond to the column names as defined "
"before the Hibernate <classname>NamingStrategy is applied."
msgstr ""
#. Tag: para
#: basic_mapping.xml:119
#, no-c-format
msgid ""
"<literal>@Entity.name lets you define the shortcut name of the "
"entity you can used in JP-QL and HQL queries. It defaults to the unqualified "
"class name of the class."
msgstr ""
#. Tag: para
#: basic_mapping.xml:123
#, no-c-format
msgid ""
"Hibernate goes beyond the JPA specification and provide additional "
"configurations. Some of them are hosted on <classname>@org.hibernate."
"annotations.Entity</classname>:"
msgstr ""
#. Tag: para
#: basic_mapping.xml:129
#, fuzzy, no-c-format
msgid ""
"<literal>dynamicInsert / dynamicUpdate "
"(defaults to false): specifies that <literal>INSERT / "
"<literal>UPDATE SQL should be generated at runtime and contain "
"only the columns whose values are not null. The <literal>dynamic-updatedynamic-insert settings are not inherited by "
"subclasses. Although these settings can increase performance in some cases, "
"they can actually decrease performance in others."
msgstr ""
"è¯·æ³¨æ„ <literal>dynamic-update å’Œ dynamic-insert<subclass> "
"或者 <literal><joined-subclass> å…ƒç´ ä¸å¯èƒ½éœ€è¦å†æ¬¡è®¾ç½®ã€‚这些"
"设置在æŸäº›æƒ…况下能够æ高效率,而其他情况下则å而å¯èƒ½é™ä½Žæ€§èƒ½ã€‚"
#. Tag: para
#: basic_mapping.xml:140
#, fuzzy, no-c-format
msgid ""
"<literal>selectBeforeUpdate (defaults to false): specifies that "
"Hibernate should <emphasis>never perform an SQL UPDATE, will Hibernate perform an extra SQL "
"<literal>SELECT to determine if an UPDATE is "
"actually required. Use of <literal>select-before-update will "
"usually decrease performance. It is useful to prevent a database update "
"trigger being called unnecessarily if you reattach a graph of detached "
"instances to a <literal>Session."
msgstr ""
"<literal>select-before-update(å¯é€‰ï¼Œé»˜è®¤ä¸º false执行 SQL UPDATE æ“作。"
"在特定场åˆï¼ˆå®žé™…上,它åªåœ¨ä¸€ä¸ªçž¬æ—¶å¯¹è±¡ï¼ˆtransient object)关è”到一个新的 "
"session ä¸æ—¶æ‰§è¡Œçš„ update() ä¸ç”Ÿæ•ˆï¼‰ï¼Œè¿™è¯´æ˜Ž Hibernate 会在 <literal>UPDATESELECT æ“作æ¥å†³å®šæ˜¯å¦ç¡®å®ž"
"需è¦æ‰§è¡Œ <literal>UPDATE。"
#. Tag: para
#: basic_mapping.xml:154
#, fuzzy, no-c-format
msgid ""
"<literal>polymorphisms (defaults to IMPLICIT ): "
"determines whether implicit or explicit query polymorphisms is used. "
"<emphasis>Implicit polymorphisms means that instances of the "
"class will be returned by a query that names any superclass or implemented "
"interface or class, and that instances of any subclass of the class will be "
"returned by a query that names the class itself. <emphasis>Explicit is appropriate. Explicit "
"polymorphisms is useful when two different classes are mapped to the same "
"table This allows a \"lightweight\" class that contains a subset of the "
"table columns."
msgstr ""
"<emphasis>Implicit(éšå¼ï¼‰çš„多æ€æ˜¯æŒ‡ï¼Œå¦‚果查询时给出的是任何超类ã€"
"该类实现的接å£æˆ–者该类的åå—,都会返回这个类的实例;如果查询ä¸ç»™å‡ºçš„是å类的"
"åå—,则会返回å类的实例。<emphasis>Explicit(显å¼ï¼‰çš„多æ€æ˜¯æŒ‡ï¼Œåª"
"有在查询时给出明确的该类åå—æ—¶æ‰ä¼šè¿”回这个类的实例; åŒæ—¶åªæœ‰åœ¨è¿™ä¸ª "
"<literal><class> 的定义ä¸ä½œä¸º <subclass><joined-subclass> 出现的å类,æ‰ä¼šå¯èƒ½"
"返回。在大多数情况下,默认的 <literal>polymorphism=\"implicit\" 都"
"是åˆé€‚的。显å¼çš„多æ€åœ¨æœ‰ä¸¤ä¸ªä¸åŒçš„ç±»æ˜ å°„åˆ°åŒä¸€ä¸ªè¡¨çš„时候很有用。(å…许一个“轻"
"é‡çº§â€çš„类,åªåŒ…å«éƒ¨åˆ†è¡¨å—段)。 "
#. Tag: para
#: basic_mapping.xml:171
#, fuzzy, no-c-format
msgid ""
"<literal>persister: specifies a custom ClassPersisterpersister attribute lets you customize the "
"persistence strategy used for the class. You can, for example, specify your "
"own subclass of <literal>org.hibernate.persister.EntityPersister, "
"or you can even provide a completely new implementation of the interface "
"<literal>org.hibernate.persister.ClassPersister that implements, "
"for example, persistence via stored procedure calls, serialization to flat "
"files or LDAP. See <literal>org.hibernate.test.CustomPersister for "
"a simple example of \"persistence\" to a <literal>Hashtable."
msgstr ""
"<literal>persister 属性å¯ä»¥è®©ä½ 定制这个类使用的æŒä¹…化ç–ç•¥ã€‚ä½ å¯ä»¥æŒ‡"
"å®šä½ è‡ªå·±å®žçŽ° <literal>org.hibernate.persister.EntityPersister çš„å"
"ç±»ï¼Œä½ ç”šè‡³å¯ä»¥å®Œå…¨ä»Žå¤´å¼€å§‹ç¼–写一个 <literal>org.hibernate.persister."
"ClassPersister</literal> 接å£çš„实现,比如是用储å˜è¿‡ç¨‹è°ƒç”¨ã€åºåˆ—化到文件或者 "
"LDAP æ•°æ®åº“æ¥å®žçŽ°ã€‚å‚阅 <literal>org.hibernate.test.CustomPersisterHashtable 的一个简å•ä¾‹å。 "
#. Tag: para
#: basic_mapping.xml:185
#, fuzzy, no-c-format
msgid ""
"<literal>optimisticLock (defaults to VERSION ): "
"determines the optimistic locking strategy. If you enable "
"<literal>dynamicUpdate, you will have a choice of optimistic "
"locking strategies:"
msgstr ""
"å¦‚æžœä½ æ‰“å¼€äº†<literal>dynamic-updateï¼Œä½ å¯ä»¥é€‰æ‹©å‡ ç§ä¹è§‚é”定的ç–略:"
#. Tag: para
#: basic_mapping.xml:192
#, no-c-format
msgid "<literal>version: check the version/timestamp columns"
msgstr "<literal>version(版本检查):检查 version/timestamp å—段"
#. Tag: para
#: basic_mapping.xml:197
#, no-c-format
msgid "<literal>all: check all columns"
msgstr "<literal>all(全部):检查全部å—段"
#. Tag: para
#: basic_mapping.xml:201
#, no-c-format
msgid ""
"<literal>dirty: check the changed columns, allowing some "
"concurrent updates"
msgstr ""
"<literal>dirty(è„检查):åªæ£€å¯Ÿä¿®æ”¹è¿‡çš„å—段,å…许æŸäº›å¹¶è¡Œæ›´æ–°"
#. Tag: para
#: basic_mapping.xml:206
#, no-c-format
msgid "<literal>none: do not use optimistic locking"
msgstr "<literal>none(ä¸æ£€æŸ¥ï¼‰ï¼šä¸ä½¿ç”¨ä¹è§‚é”定"
#. Tag: para
#: basic_mapping.xml:211
#, no-c-format
msgid ""
"It is <emphasis>strongly recommended that you use version/"
"timestamp columns for optimistic locking with Hibernate. This strategy "
"optimizes performance and correctly handles modifications made to detached "
"instances (i.e. when <literal>Session.merge() is used)."
msgstr ""
"我们<emphasis>å¼ºçƒˆå»ºè®®ä½ åœ¨ Hibernate ä¸ä½¿ç”¨ version/timestamp å—段"
"æ¥è¿›è¡Œä¹è§‚é”定。这个选择å¯ä»¥ä¼˜åŒ–性能,且能够处ç†å¯¹è„±ç®¡å®žä¾‹çš„修改(例如:在使"
"用 <literal>Session.merge() 的时候)。"
#. Tag: para
#: basic_mapping.xml:220
#, no-c-format
msgid ""
"Be sure to import <classname>@javax.persistence.Entity to mark a "
"class as an entity. It's a common mistake to import <classname>@org."
"hibernate.annotations.Entity</classname> by accident."
msgstr ""
#. Tag: para
#: basic_mapping.xml:227
#, fuzzy, no-c-format
msgid ""
"Some entities are not mutable. They cannot be updated or deleted by the "
"application. This allows Hibernate to make some minor performance "
"optimizations.. Use the <classname>@Immutable annotation."
msgstr ""
"ä¸å¯å˜ç±»ï¼Œ<literal>mutable=\"false\" ä¸å¯ä»¥è¢«åº”用程åºæ›´æ–°æˆ–è€…åˆ é™¤ã€‚"
"è¿™å…许 Hibernate 实现一些å°å°çš„性能优化。"
#. Tag: para
#: basic_mapping.xml:232
#, fuzzy, no-c-format
msgid ""
"You can also alter how Hibernate deals with lazy initialization for this "
"class. On <classname>@Proxy, use lazy =false "
"to disable lazy fetching (not recommended). You can also specify an "
"interface to use for lazy initializing proxies (defaults to the class "
"itself): use <literal>proxyClass on @Proxy . "
"Hibernate will initially return proxies (Javassist or CGLIB) that implement "
"the named interface. The persistent object will load when a method of the "
"proxy is invoked. See \"Initializing collections and proxies\" below."
msgstr ""
"å¯é€‰çš„ <literal>proxy 属性å…è®¸å»¶è¿ŸåŠ è½½ç±»çš„æŒä¹…化实例。Hibernate å¼€"
"始会返回实现了这个命å接å£çš„ CGLIB 代ç†ã€‚当代ç†çš„æŸä¸ªæ–¹æ³•è¢«å®žé™…调用的时候,真"
"实的æŒä¹…化对象æ‰ä¼šè¢«è£…载。å‚è§ä¸‹é¢çš„“用于延迟装载的代ç†â€ã€‚ "
#. Tag: para
#: basic_mapping.xml:243
#, no-c-format
msgid ""
"<classname>@BatchSize specifies a \"batch size\" for fetching "
"instances of this class by identifier. Not yet loaded instances are loaded "
"batch-size at a time (default 1)."
msgstr ""
#. Tag: para
#: basic_mapping.xml:247
#, fuzzy, no-c-format
msgid ""
"You can specific an arbitrary SQL WHERE condition to be used when retrieving "
"objects of this class. Use <classname>@Where for that."
msgstr ""
"<literal>where(å¯é€‰ï¼‰æŒ‡å®šä¸€ä¸ªé™„åŠ çš„ SQL WHERE "
"æ¡ä»¶ï¼Œåœ¨æŠ“å–è¿™ä¸ªç±»çš„å¯¹è±¡æ—¶ä¼šä¸€ç›´å¢žåŠ è¿™ä¸ªæ¡ä»¶ã€‚ "
#. Tag: para
#: basic_mapping.xml:251
#, fuzzy, no-c-format
msgid ""
"In the same vein, <classname>@Check lets you define an SQL "
"expression used to generate a multi-row <emphasis>check "
"constraint for automatic schema generation."
msgstr ""
"<literal>check(å¯é€‰ï¼‰ï¼šè¿™æ˜¯ä¸€ä¸ª SQL 表达å¼ï¼Œ 用于为自动生æˆçš„ "
"schema æ·»åŠ å¤šè¡Œï¼ˆmulti-row)约æŸ<emphasis>检查。 "
#. Tag: para
#: basic_mapping.xml:255
#, fuzzy, no-c-format
msgid ""
"There is no difference between a view and a base table for a Hibernate "
"mapping. This is transparent at the database level, although some DBMS do "
"not support views properly, especially with updates. Sometimes you want to "
"use a view, but you cannot create one in the database (i.e. with a legacy "
"schema). In this case, you can map an immutable and read-only entity to a "
"given SQL subselect expression using <classname>@org.hibernate.annotations."
"Subselect</classname>:"
msgstr ""
"对 Hibernate æ˜ å°„æ¥è¯´è§†å›¾å’Œè¡¨æ˜¯æ²¡æœ‰åŒºåˆ«çš„ï¼Œè¿™æ˜¯å› ä¸ºå®ƒä»¬åœ¨æ•°æ®å±‚都是é€æ˜Žçš„"
"( 注æ„:一些数æ®åº“ä¸æ”¯æŒè§†å›¾å±žæ€§ï¼Œç‰¹åˆ«æ˜¯æ›´æ–°çš„æ—¶å€™ï¼‰ã€‚æœ‰æ—¶ä½ æƒ³ä½¿ç”¨è§†å›¾ï¼Œä½†å´"
"ä¸èƒ½åœ¨æ•°æ®åº“ä¸åˆ›å»ºå®ƒï¼ˆä¾‹å¦‚:在é—留的 schema ä¸ï¼‰ã€‚è¿™æ ·çš„è¯ï¼Œä½ å¯ä»¥æ˜ 射一个ä¸"
"å¯å˜çš„(immutable)并且是 åªè¯»çš„实体到一个给定的 SQL å查询表达å¼ï¼š "
#. Tag: programlisting
#: basic_mapping.xml:263
#, fuzzy, no-c-format
msgid ""
"@Entity\n"
"@Subselect(\"select item.name, max(bid.amount), count(*) \"\n"
" + \"from item \"\n"
" + \"join bid on bid.item_id = item.id \"\n"
" + \"group by item.name\")\n"
"@Synchronize( {\"item\", \"bid\"} ) //tables impacted\n"
"public class Summary {\n"
" @Id\n"
" public String getId() { return id; }\n"
" ...\n"
"}"
msgstr ""
"<![CDATA["
#. Tag: para
#: basic_mapping.xml:265
#, no-c-format
msgid ""
"Declare the tables to synchronize this entity with, ensuring that auto-flush "
"happens correctly and that queries against the derived entity do not return "
"stale data. The <literal><subselect> is available both as an "
"attribute and a nested mapping element."
msgstr ""
"定义这个实体用到的表为åŒæ¥ï¼ˆsynchronize),确ä¿è‡ªåŠ¨åˆ·æ–°ï¼ˆauto-flush)æ£ç¡®æ‰§"
"行,并且ä¾èµ–原实体的查询ä¸ä¼šè¿”回过期数æ®ã€‚åœ¨å±žæ€§å…ƒç´ å’ŒåµŒå¥—æ˜ å°„å…ƒç´ ä¸éƒ½å¯ä½¿ç”¨ "
"<literal><subselect>。"
#. Tag: para
#: basic_mapping.xml:270
#, fuzzy, no-c-format
msgid ""
"We will now explore the same options using the hbm.xml structure. You can "
"declare a persistent class using the <literal>class element. For "
"example:"
msgstr "ä½ å¯ä»¥ä½¿ç”¨ <literal>class å…ƒç´ æ¥å®šä¹‰ä¸€ä¸ªæŒä¹…化类。例如:"
#. Tag: programlisting
#: basic_mapping.xml:319
#, fuzzy, no-c-format
msgid ""
"<class\n"
" name=\"ClassName\"\n"
" table=\"tableName\"\n"
" discriminator-value=\"discriminator_value\"\n"
" mutable=\"true|false\"\n"
" schema=\"owner\"\n"
" catalog=\"catalog\"\n"
" proxy=\"ProxyInterface\"\n"
" dynamic-update=\"true|false\"\n"
" dynamic-insert=\"true|false\"\n"
" select-before-update=\"true|false\"\n"
" polymorphism=\"implicit|explicit\"\n"
" where=\"arbitrary sql where condition\"\n"
" persister=\"PersisterClass\"\n"
" batch-size=\"N\"\n"
" optimistic-lock=\"none|version|dirty|all\"\n"
" lazy=\"true|false\"\n"
" entity-name=\"EntityName\"\n"
" check=\"arbitrary sql check condition\"\n"
" rowid=\"rowid\"\n"
" subselect=\"SQL expression\"\n"
" abstract=\"true|false\"\n"
" node=\"element-name\"\n"
"/>"
msgstr ""
"<![CDATA["
#. Tag: para
#: basic_mapping.xml:323
#, no-c-format
msgid ""
"<literal>name (optional): the fully qualified Java class name of "
"the persistent class or interface. If this attribute is missing, it is "
"assumed that the mapping is for a non-POJO entity."
msgstr ""
"<literal>name(å¯é€‰ï¼‰ï¼šæŒä¹…化类(或者接å£ï¼‰çš„ Java å…¨é™å®šå。 如果"
"这个属性ä¸å˜åœ¨ï¼ŒHibernate å°†å‡å®šè¿™æ˜¯ä¸€ä¸ªéž POJO çš„å®žä½“æ˜ å°„ã€‚ "
#. Tag: para
#: basic_mapping.xml:330
#, no-c-format
msgid ""
"<literal>table (optional - defaults to the unqualified class "
"name): the name of its database table."
msgstr ""
"<literal>table(å¯é€‰ — 默认是类的éžå…¨é™å®šå):对应的数æ®åº“表å。 "
#. Tag: para
#: basic_mapping.xml:335
#, no-c-format
msgid ""
"<literal>discriminator-value (optional - defaults to the class "
"name): a value that distinguishes individual subclasses that is used for "
"polymorphic behavior. Acceptable values include <literal>null and "
"<literal>not null."
msgstr ""
"<literal>discriminator-value(å¯é€‰ — 默认和类åä¸€æ ·ï¼‰ï¼šä¸€ä¸ªç”¨äºŽåŒºåˆ†"
"ä¸åŒçš„å类的值,在多æ€è¡Œä¸ºæ—¶ä½¿ç”¨ã€‚它å¯ä»¥æŽ¥å—的值包括 <literal>null "
"和 <literal>not null。 "
#. Tag: para
#: basic_mapping.xml:343
#, no-c-format
msgid ""
"<literal>mutable (optional - defaults to true ): "
"specifies that instances of the class are (not) mutable."
msgstr ""
"<literal>mutable(å¯é€‰ï¼Œé»˜è®¤å€¼ä¸º true ):表明该"
"类的实例是å¯å˜çš„或者ä¸å¯å˜çš„。 "
#. Tag: para
#: basic_mapping.xml:349 basic_mapping.xml:2948
#, no-c-format
msgid ""
"<literal>schema (optional): overrides the schema name specified by "
"the root <literal><hibernate-mapping> element."
msgstr ""
"<literal>schema(å¯é€‰ï¼‰ï¼šè¦†ç›–åœ¨æ ¹ <hibernate-"
"mapping></literal> å…ƒç´ ä¸æŒ‡å®šçš„ schema åå—。 "
#. Tag: para
#: basic_mapping.xml:355 basic_mapping.xml:2954
#, no-c-format
msgid ""
"<literal>catalog (optional): overrides the catalog name specified "
"by the root <literal><hibernate-mapping> element."
msgstr ""
"<literal>catalog(å¯é€‰ï¼‰ï¼šè¦†ç›–åœ¨æ ¹ <hibernate-"
"mapping></literal> å…ƒç´ ä¸æŒ‡å®šçš„ catalog åå—。 "
#. Tag: para
#: basic_mapping.xml:361
#, no-c-format
msgid ""
"<literal>proxy (optional): specifies an interface to use for lazy "
"initializing proxies. You can specify the name of the class itself."
msgstr ""
"<literal>proxy(å¯é€‰ï¼‰ï¼šæŒ‡å®šä¸€ä¸ªæŽ¥å£ï¼Œåœ¨å»¶è¿Ÿè£…载时作为代ç†ä½¿ç”¨ã€‚ä½ "
"å¯ä»¥åœ¨è¿™é‡Œä½¿ç”¨è¯¥ç±»è‡ªå·±çš„åå—。 "
#. Tag: para
#: basic_mapping.xml:367
#, no-c-format
msgid ""
"<literal>dynamic-update (optional - defaults to falseUPDATE SQL should be generated "
"at runtime and can contain only those columns whose values have changed."
msgstr ""
"<literal>dynamic-update(å¯é€‰ï¼Œé»˜è®¤ä¸º false ):"
"指定用于 <literal>UPDATE çš„ SQL 将会在è¿è¡Œæ—¶åŠ¨æ€ç”Ÿæˆï¼Œå¹¶ä¸”åªæ›´æ–°é‚£"
"些改å˜è¿‡çš„å—段。 "
#. Tag: para
#: basic_mapping.xml:374
#, no-c-format
msgid ""
"<literal>dynamic-insert (optional - defaults to falseINSERT SQL should be generated "
"at runtime and contain only the columns whose values are not null."
msgstr ""
"<literal>dynamic-insert(å¯é€‰ï¼Œé»˜è®¤ä¸º false ):"
"指定用于 <literal>INSERT çš„ SQL 将会在è¿è¡Œæ—¶åŠ¨æ€ç”Ÿæˆï¼Œå¹¶ä¸”åªåŒ…å«é‚£"
"些éžç©ºå€¼å—段。 "
#. Tag: para
#: basic_mapping.xml:381
#, no-c-format
msgid ""
"<literal>select-before-update (optional - defaults to "
"<literal>false): specifies that Hibernate should neverUPDATE unless it is certain that "
"an object is actually modified. Only when a transient object has been "
"associated with a new session using <literal>update(), will "
"Hibernate perform an extra SQL <literal>SELECT to determine if an "
"<literal>UPDATE is actually required."
msgstr ""
"<literal>select-before-update(å¯é€‰ï¼Œé»˜è®¤ä¸º false执行 SQL UPDATE æ“作。"
"在特定场åˆï¼ˆå®žé™…上,它åªåœ¨ä¸€ä¸ªçž¬æ—¶å¯¹è±¡ï¼ˆtransient object)关è”到一个新的 "
"session ä¸æ—¶æ‰§è¡Œçš„ update() ä¸ç”Ÿæ•ˆï¼‰ï¼Œè¿™è¯´æ˜Ž Hibernate 会在 <literal>UPDATESELECT æ“作æ¥å†³å®šæ˜¯å¦ç¡®å®ž"
"需è¦æ‰§è¡Œ <literal>UPDATE。"
#. Tag: para
#: basic_mapping.xml:393
#, fuzzy, no-c-format
msgid ""
"<literal>polymorphisms (optional - defaults to implicit(å¯é€‰ï¼Œé»˜è®¤å€¼ä¸º implicit "
"(éšå¼ï¼‰</literal>):界定是éšå¼è¿˜æ˜¯æ˜¾å¼çš„使用多æ€æŸ¥è¯¢ï¼ˆè¿™åªåœ¨ Hibernate çš„å…·"
"体表继承ç–ç•¥ä¸ç”¨åˆ° — 译注)。 "
#. Tag: para
#: basic_mapping.xml:399
#, no-c-format
msgid ""
"<literal>where (optional): specifies an arbitrary SQL "
"<literal>WHERE condition to be used when retrieving objects of "
"this class."
msgstr ""
"<literal>where(å¯é€‰ï¼‰æŒ‡å®šä¸€ä¸ªé™„åŠ çš„ SQL WHERE "
"æ¡ä»¶ï¼Œåœ¨æŠ“å–è¿™ä¸ªç±»çš„å¯¹è±¡æ—¶ä¼šä¸€ç›´å¢žåŠ è¿™ä¸ªæ¡ä»¶ã€‚ "
#. Tag: para
#: basic_mapping.xml:405
#, no-c-format
msgid ""
"<literal>persister (optional): specifies a custom "
"<literal>ClassPersister."
msgstr ""
"<literal>persister(å¯é€‰ï¼‰ï¼šæŒ‡å®šä¸€ä¸ªå®šåˆ¶çš„ "
"<literal>ClassPersister。 "
#. Tag: para
#: basic_mapping.xml:410
#, no-c-format
msgid ""
"<literal>batch-size (optional - defaults to 1 ): "
"specifies a \"batch size\" for fetching instances of this class by "
"identifier."
msgstr ""
"<literal>batch-size(å¯é€‰,默认是 1 )指定一个用"
"于 æ ¹æ®æ ‡è¯†ç¬¦ï¼ˆidentifier)抓å–实例时使用的 \"batch size\"(批次抓å–æ•°é‡ï¼‰ã€‚ "
#. Tag: para
#: basic_mapping.xml:416
#, no-c-format
msgid ""
"<literal>optimistic-lock (optional - defaults to version(å¯é€‰ï¼Œé»˜è®¤æ˜¯ "
"<literal>version ):决定ä¹è§‚é”定的ç–略。 "
#. Tag: para
#: basic_mapping.xml:422
#, no-c-format
msgid ""
"<literal>lazy (optional): lazy fetching can be disabled by setting "
"<literal>lazy=\"false\"."
msgstr ""
"<literal>lazy(å¯é€‰ï¼‰ï¼šé€šè¿‡è®¾ç½® lazy=\"false\" ,"
"æ‰€æœ‰çš„å»¶è¿ŸåŠ è½½ï¼ˆLazy fetching)功能将被全部ç¦ç”¨ï¼ˆdisabled)。"
#. Tag: para
#: basic_mapping.xml:427
#, fuzzy, no-c-format
msgid ""
"<literal>entity-name (optional - defaults to the class name): "
"Hibernate3 allows a class to be mapped multiple times, potentially to "
"different tables. It also allows entity mappings that are represented by "
"Maps or XML at the Java level. In these cases, you should provide an "
"explicit arbitrary name for the entity. See <xref linkend=\"persistent-"
"classes-dynamicmodels\"/> and <xref linkend=\"xml\"/> for more information."
msgstr ""
"<literal>entity-name(å¯é€‰ï¼Œé»˜è®¤ä¸ºç±»å):Hibernate3 å…许一个类进行"
"å¤šæ¬¡æ˜ å°„ï¼ˆå‰ææ˜¯æ˜ å°„åˆ°ä¸åŒçš„表),并且å…许使用 Maps 或 XML 代替 Java 层次的实"
"ä½“æ˜ å°„ï¼ˆä¹Ÿå°±æ˜¯å®žçŽ°åŠ¨æ€é¢†åŸŸæ¨¡åž‹ï¼Œä¸ç”¨å†™æŒä¹…化类ï¼è¯‘注)。更多信æ¯è¯·çœ‹ <xref "
"linkend=\"persistent-classes-dynamicmodels\"/> 和 <xref linkend=\"xml\"/>。 "
#. Tag: para
#: basic_mapping.xml:437
#, no-c-format
msgid ""
"<literal>check (optional): an SQL expression used to generate a "
"multi-row <emphasis>check constraint for automatic schema "
"generation."
msgstr ""
"<literal>check(å¯é€‰ï¼‰ï¼šè¿™æ˜¯ä¸€ä¸ª SQL 表达å¼ï¼Œ 用于为自动生æˆçš„ "
"schema æ·»åŠ å¤šè¡Œï¼ˆmulti-row)约æŸ<emphasis>检查。 "
#. Tag: para
#: basic_mapping.xml:443
#, no-c-format
msgid ""
"<literal>rowid (optional): Hibernate can use ROWIDs on databases. "
"On Oracle, for example, Hibernate can use the <literal>rowid extra "
"column for fast updates once this option has been set to <literal>rowid(å¯é€‰ï¼‰ï¼šHibernate å¯ä»¥ä½¿ç”¨æ•°æ®åº“支æŒçš„所谓的 "
"ROWIDs,例如:Oracle æ•°æ®åº“ï¼Œå¦‚æžœä½ è®¾ç½®è¿™ä¸ªå¯é€‰çš„ <literal>rowid,"
"Hibernate å¯ä»¥ä½¿ç”¨é¢å¤–çš„å—段 <literal>rowid 实现快速更新。ROWID 是"
"这个功能实现的é‡ç‚¹ï¼Œå®ƒä»£è¡¨äº†ä¸€ä¸ªå˜å‚¨å…ƒç»„(tuple)的物ç†ä½ç½®ã€‚ "
#. Tag: para
#: basic_mapping.xml:452
#, no-c-format
msgid ""
"<literal>subselect (optional): maps an immutable and read-only "
"entity to a database subselect. This is useful if you want to have a view "
"instead of a base table. See below for more information."
msgstr ""
"<literal>subselect(å¯é€‰ï¼‰ï¼šå®ƒå°†ä¸€ä¸ªä¸å¯å˜ï¼ˆimmutable)并且åªè¯»çš„实"
"ä½“æ˜ å°„åˆ°ä¸€ä¸ªæ•°æ®åº“çš„å查询ä¸ã€‚å½“ä½ æƒ³ç”¨è§†å›¾ä»£æ›¿ä¸€å¼ åŸºæœ¬è¡¨çš„æ—¶å€™ï¼Œè¿™æ˜¯æœ‰ç”¨çš„ï¼Œ"
"但最好ä¸è¦è¿™æ ·åšã€‚更多的介ç»è¯·çœ‹ä¸‹é¢å†…容。 "
#. Tag: para
#: basic_mapping.xml:459
#, no-c-format
msgid ""
"<literal>abstract (optional): is used to mark abstract "
"superclasses in <literal><union-subclass> hierarchies."
msgstr ""
"<literal>abstract(å¯é€‰ï¼‰ï¼šç”¨äºŽåœ¨ <union-subclass>static."
msgstr ""
"若指明的æŒä¹…化类实际上是一个接å£ï¼Œè¿™ä¹Ÿæ˜¯å®Œå…¨å¯ä»¥æŽ¥å—的。之åŽä½ å¯ä»¥ç”¨å…ƒç´ "
"<literal><subclass> æ¥æŒ‡å®šè¯¥æŽ¥å£çš„å®žé™…å®žçŽ°ç±»ã€‚ä½ å¯ä»¥æŒä¹…化任"
"何 <emphasis>static(é™æ€çš„ï¼‰å†…éƒ¨ç±»ã€‚ä½ åº”è¯¥ä½¿ç”¨æ ‡å‡†çš„ç±»åæ ¼å¼æ¥æŒ‡"
"定类å,比如:<literal>Foo$Bar。"
#. Tag: para
#: basic_mapping.xml:472
#, no-c-format
msgid "Here is how to do a virtual view (subselect) in XML:"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:474
#, fuzzy, no-c-format
msgid ""
"<class name=\"Summary\">\n"
" <subselect>\n"
" select item.name, max(bid.amount), count(*)\n"
" from item\n"
" join bid on bid.item_id = item.id\n"
" group by item.name\n"
" </subselect>\n"
" <synchronize table=\"item\"/>\n"
" <synchronize table=\"bid\"/>\n"
" <id name=\"name\"/>\n"
" ...\n"
"</class>"
msgstr ""
"<![CDATA["
#. Tag: para
#: basic_mapping.xml:476
#, no-c-format
msgid ""
"The <literal><subselect> is available both as an attribute "
"and a nested mapping element."
msgstr ""
#. Tag: title
#: basic_mapping.xml:481
#, fuzzy, no-c-format
msgid "Identifiers"
msgstr "程åºåˆ†é…çš„æ ‡è¯†ç¬¦ï¼ˆAssigned Identifiers)"
#. Tag: para
#: basic_mapping.xml:483
#, fuzzy, no-c-format
msgid ""
"Mapped classes <emphasis>must declare the primary key column of "
"the database table. Most classes will also have a JavaBeans-style property "
"holding the unique identifier of an instance."
msgstr ""
"è¢«æ˜ å°„çš„ç±»<emphasis>必须定义对应数æ®åº“表主键å—段。大多数类有一个 "
"JavaBeans é£Žæ ¼çš„å±žæ€§ï¼Œ 为æ¯ä¸€ä¸ªå®žä¾‹åŒ…å«å”¯ä¸€çš„æ ‡è¯†ã€‚<literal><id>."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:491
#, no-c-format
msgid ""
"@Entity\n"
"public class Person {\n"
" @Id Integer getId() { ... }\n"
" ...\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:493
#, fuzzy, no-c-format
msgid ""
"In hbm.xml, use the <literal><id> element which defines the "
"mapping from that property to the primary key column."
msgstr ""
"注æ„使用 <literal><column> æ ‡ç¾æ¥æŠŠä¸€ä¸ªå±žæ€§æ˜ 射到多个å—段的åš"
"法。"
#. Tag: programlisting
#: basic_mapping.xml:509
#, fuzzy, no-c-format
msgid ""
"<id\n"
" name=\"propertyName\"\n"
" type=\"typename\"\n"
" column=\"column_name\"\n"
" unsaved-value=\"null|any|none|undefined|id_value\"\n"
" access=\"field|property|ClassName\">\n"
" node=\"element-name|@attribute-name|element/@attribute|.\"\n"
"\n"
" <generator class=\"generatorClass\"/>\n"
"</id>"
msgstr ""
"<![CDATA["
#. Tag: para
#: basic_mapping.xml:513
#, no-c-format
msgid ""
"<literal>name (optional): the name of the identifier property."
msgstr "<literal>name(å¯é€‰ï¼‰ï¼šæ ‡è¯†å±žæ€§çš„åå—。 "
#. Tag: para
#: basic_mapping.xml:518 basic_mapping.xml:2152
#, no-c-format
msgid ""
"<literal>type (optional): a name that indicates the Hibernate type."
msgstr "<literal>type(å¯é€‰ï¼‰ï¼šä¸€ä¸ª Hibernate 类型的åå—。"
#. Tag: para
#: basic_mapping.xml:523
#, no-c-format
msgid ""
"<literal>column (optional - defaults to the property name): the "
"name of the primary key column."
msgstr "<literal>column(å¯é€‰ — 默认为属性å):主键å—段的åå—。 "
#. Tag: para
#: basic_mapping.xml:528
#, no-c-format
msgid ""
"<literal>unsaved-value (optional - defaults to a \"sensible\" "
"value): an identifier property value that indicates an instance is newly "
"instantiated (unsaved), distinguishing it from detached instances that were "
"saved or loaded in a previous session."
msgstr ""
"<literal>unsaved-value(å¯é€‰ — 默认为一个切åˆå®žé™…(sensible)的"
"å€¼ï¼‰ï¼šä¸€ä¸ªç‰¹å®šçš„æ ‡è¯†å±žæ€§å€¼ï¼Œç”¨æ¥æ ‡å¿—该实例是刚刚创建的,尚未ä¿å˜ã€‚è¿™å¯ä»¥æŠŠè¿™"
"ç§å®žä¾‹å’Œä»Žä»¥å‰çš„ session ä¸è£…载过(å¯èƒ½åˆåšè¿‡ä¿®æ”¹--译者注)但未å†æ¬¡æŒä¹…化的实"
"例区分开æ¥ã€‚ "
#. Tag: para
#: basic_mapping.xml:536
#, no-c-format
msgid ""
"<literal>access (optional - defaults to property(å¯é€‰ — 默认为 property ):"
"Hibernate 用æ¥è®¿é—®å±žæ€§å€¼çš„ç–略。 "
#. Tag: para
#: basic_mapping.xml:543
#, no-c-format
msgid ""
"If the <literal>name attribute is missing, it is assumed that the "
"class has no identifier property."
msgstr "如果 <literal>name 属性ä¸å˜åœ¨ï¼Œä¼šè®¤ä¸ºè¿™ä¸ªç±»æ²¡æœ‰æ ‡è¯†å±žæ€§ã€‚"
#. Tag: para
#: basic_mapping.xml:546
#, fuzzy, no-c-format
msgid ""
"The <literal>unsaved-value attribute is almost never needed in "
"Hibernate3 and indeed has no corresponding element in annotations."
msgstr "<literal>unsaved-value 属性在 Hibernate3 ä¸å‡ 乎ä¸å†éœ€è¦ã€‚"
#. Tag: para
#: basic_mapping.xml:550
#, fuzzy, no-c-format
msgid ""
"You can also declare the identifier as a composite identifier. This allows "
"access to legacy data with composite keys. Its use is strongly discouraged "
"for anything else."
msgstr ""
"还有一个å¦å¤–çš„ <literal><composite-id> 定义å¯ä»¥è®¿é—®æ—§å¼çš„多主"
"键数æ®ã€‚我们éžå¸¸ä¸é¼“励使用这ç§æ–¹å¼ã€‚"
#. Tag: title
#: basic_mapping.xml:555
#, fuzzy, no-c-format
msgid "Composite identifier"
msgstr "程åºåˆ†é…çš„æ ‡è¯†ç¬¦ï¼ˆAssigned Identifiers)"
#. Tag: para
#: basic_mapping.xml:557
#, no-c-format
msgid "You can define a composite primary key through several syntaxes:"
msgstr ""
#. Tag: para
#: basic_mapping.xml:562
#, no-c-format
msgid ""
"use a component type to represent the identifier and map it as a property in "
"the entity: you then annotated the property as <classname>@EmbeddedIdSerializable."
msgstr ""
#. Tag: para
#: basic_mapping.xml:569
#, no-c-format
msgid ""
"map multiple properties as <classname>@Id properties: the "
"identifier type is then the entity class itself and needs to be "
"<classname>Serializable. This approach is unfortunately not "
"standard and only supported by Hibernate."
msgstr ""
#. Tag: para
#: basic_mapping.xml:577
#, no-c-format
msgid ""
"map multiple properties as <classname>@Id properties and declare "
"an external class to be the identifier type. This class, which needs to be "
"<classname>Serializable, is declared on the entity via the "
"<classname>@IdClass annotation. The identifier type must contain "
"the same properties as the identifier properties of the entity: each "
"property name must be the same, its type must be the same as well if the "
"entity property is of a basic type, its type must be the type of the primary "
"key of the associated entity if the entity property is an association "
"(either a <classname>@OneToOne or a @ManyToOne."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:604
#, no-c-format
msgid ""
"@Entity\n"
"class User {\n"
" @EmbeddedId\n"
" @AttributeOverride(name=\"firstName\", column=@Column(name=\"fld_firstname"
"\")\n"
" UserId id;\n"
"\n"
" Integer age;\n"
"}\n"
"\n"
"@Embeddable\n"
"class UserId implements Serializable {\n"
" String firstName;\n"
" String lastName;\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:606
#, no-c-format
msgid ""
"You can notice that the <classname>UserId class is serializable. "
"To override the column mapping, use <classname>@AttributeOverride annotation. "
"The <classname>@MapsId value correspond to the property name of "
"the embedded id object containing the associated entity's identifier. In the "
"database, it means that the <literal>Customer.user and the "
"<literal>CustomerId.userId properties share the same underlying "
"column (<literal>user_fk in this case)."
msgstr ""
#. Tag: para
#: basic_mapping.xml:627
#, no-c-format
msgid ""
"The component type used as identifier must implement <methodname>equals()hashCode()."
msgstr ""
#. Tag: para
#: basic_mapping.xml:632
#, no-c-format
msgid ""
"In practice, your code only sets the <literal>Customer.user "
"property and the user id value is copied by Hibernate into the "
"<literal>CustomerId.userId property."
msgstr ""
#. Tag: para
#: basic_mapping.xml:638
#, no-c-format
msgid ""
"The id value can be copied as late as flush time, don't rely on it until "
"after flush time."
msgstr ""
#. Tag: para
#: basic_mapping.xml:642
#, no-c-format
msgid ""
"While not supported in JPA, Hibernate lets you place your association "
"directly in the embedded id component (instead of having to use the "
"<classname>@MapsId annotation)."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:646
#, no-c-format
msgid ""
"@Entity\n"
"class Customer {\n"
" @EmbeddedId CustomerId id;\n"
" boolean preferredCustomer;\n"
"}\n"
"\n"
"@Embeddable\n"
"class CustomerId implements Serializable {\n"
" @OneToOne\n"
" @JoinColumns({\n"
" @JoinColumn(name=\"userfirstname_fk\", referencedColumnName=\"firstName"
"\"),\n"
" @JoinColumn(name=\"userlastname_fk\", referencedColumnName=\"lastName"
"\")\n"
" }) \n"
" User user;\n"
" String customerNumber;\n"
"\n"
" //implements equals and hashCode\n"
"}\n"
"\n"
"@Entity \n"
"class User {\n"
" @EmbeddedId UserId id;\n"
" Integer age;\n"
"}\n"
"\n"
"@Embeddable\n"
"class UserId implements Serializable {\n"
" String firstName;\n"
" String lastName;\n"
"\n"
"\n"
" //implements equals and hashCode\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:648
#, no-c-format
msgid "Let's now rewrite these examples using the hbm.xml syntax."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:651
#, fuzzy, no-c-format
msgid ""
"<composite-id\n"
" name=\"propertyName\"\n"
" class=\"ClassName\"\n"
" mapped=\"true|false\"\n"
" access=\"field|property|ClassName\"\n"
" node=\"element-name|.\">\n"
"\n"
" <key-property name=\"propertyName\" type=\"typename\" column="
"\"column_name\"/>\n"
" <key-many-to-one name=\"propertyName\" class=\"ClassName\" column="
"\"column_name\"/>\n"
" ......\n"
"</composite-id>"
msgstr ""
"<![CDATA["
#. Tag: para
#: basic_mapping.xml:653
#, no-c-format
msgid "First a simple example:"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:655
#, no-c-format
msgid ""
"<class name=\"User\">\n"
" <composite-id name=\"id\" class=\"UserId\">\n"
" <key-property name=\"firstName\" column=\"fld_firstname\"/>\n"
" <key-property name=\"lastName\"/>\n"
" </composite-id>\n"
"</class>"
msgstr ""
#. Tag: para
#: basic_mapping.xml:657
#, no-c-format
msgid "Then an example showing how an association can be mapped."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:660
#, no-c-format
msgid ""
"<class name=\"Customer\">\n"
" <composite-id name=\"id\" class=\"CustomerId\">\n"
" <key-property name=\"firstName\" column=\"userfirstname_fk\"/>\n"
" <key-property name=\"lastName\" column=\"userfirstname_fk\"/>\n"
" <key-property name=\"customerNumber\"/>\n"
" </composite-id>\n"
"\n"
" <property name=\"preferredCustomer\"/>\n"
"\n"
" <many-to-one name=\"user\">\n"
" <column name=\"userfirstname_fk\" updatable=\"false\" insertable="
"\"false\"/>\n"
" <column name=\"userlastname_fk\" updatable=\"false\" insertable="
"\"false\"/>\n"
" </many-to-one>\n"
"</class>\n"
"\n"
"<class name=\"User\">\n"
" <composite-id name=\"id\" class=\"UserId\">\n"
" <key-property name=\"firstName\"/>\n"
" <key-property name=\"lastName\"/>\n"
" </composite-id>\n"
"\n"
" <property name=\"age\"/>\n"
"</class>"
msgstr ""
#. Tag: para
#: basic_mapping.xml:662
#, no-c-format
msgid "Notice a few things in the previous example:"
msgstr ""
#. Tag: para
#: basic_mapping.xml:666
#, no-c-format
msgid ""
"the order of the properties (and column) matters. It must be the same "
"between the association and the primary key of the associated entity"
msgstr ""
#. Tag: para
#: basic_mapping.xml:672
#, no-c-format
msgid ""
"the many to one uses the same columns as the primary key and thus must be "
"marked as read only (<literal>insertable and updatable, the id value of the associated "
"entity is not transparently copied, check the <literal>foreign id "
"generator for more information."
msgstr ""
#. Tag: para
#: basic_mapping.xml:686
#, no-c-format
msgid ""
"The last example shows how to map association directly in the embedded id "
"component."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:689
#, no-c-format
msgid ""
"<class name=\"Customer\">\n"
" <composite-id name=\"id\" class=\"CustomerId\">\n"
" <key-many-to-one name=\"user\">\n"
" <column name=\"userfirstname_fk\"/>\n"
" <column name=\"userlastname_fk\"/>\n"
" </key-many-to-one>\n"
" <key-property name=\"customerNumber\"/>\n"
" </composite-id>\n"
"\n"
" <property name=\"preferredCustomer\"/>\n"
"</class>\n"
"\n"
"<class name=\"User\">\n"
" <composite-id name=\"id\" class=\"UserId\">\n"
" <key-property name=\"firstName\"/>\n"
" <key-property name=\"lastName\"/>\n"
" </composite-id>\n"
"\n"
" <property name=\"age\"/>\n"
"</class>"
msgstr ""
#. Tag: para
#: basic_mapping.xml:691
#, no-c-format
msgid ""
"This is the recommended approach to map composite identifier. The following "
"options should not be considered unless some constraint are present."
msgstr ""
#. Tag: title
#: basic_mapping.xml:697
#, no-c-format
msgid "Multiple id properties without identifier type"
msgstr ""
#. Tag: para
#: basic_mapping.xml:699
#, no-c-format
msgid ""
"Another, arguably more natural, approach is to place <classname>@Id is its own identifier "
"representation: it must implement <classname>Serializable and "
"must implement <methodname>equals() and hashCode() on an entity points to the class (component) "
"representing the identifier of the class. The properties marked "
"<classname>@Id on the entity must have their corresponding "
"property on the <classname>@IdClass. The return type of search "
"twin property must be either identical for basic properties or must "
"correspond to the identifier class of the associated entity for an "
"association."
msgstr ""
#. Tag: para
#: basic_mapping.xml:730
#, no-c-format
msgid ""
"This approach is inherited from the EJB 2 days and we recommend against its "
"use. But, after all it's your application and Hibernate supports it."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:735
#, no-c-format
msgid ""
"@Entity\n"
"@IdClass(CustomerId.class)\n"
"class Customer implements Serializable {\n"
" @Id @OneToOne\n"
" @JoinColumns({\n"
" @JoinColumn(name=\"userfirstname_fk\", referencedColumnName=\"firstName"
"\"),\n"
" @JoinColumn(name=\"userlastname_fk\", referencedColumnName=\"lastName"
"\")\n"
" }) \n"
" User user;\n"
" \n"
" @Id String customerNumber;\n"
"\n"
" boolean preferredCustomer;\n"
"}\n"
"\n"
"class CustomerId implements Serializable {\n"
" UserId user;\n"
" String customerNumber;\n"
"\n"
" //implements equals and hashCode\n"
"}\n"
"\n"
"@Entity \n"
"class User {\n"
" @EmbeddedId UserId id;\n"
" Integer age;\n"
"\n"
" //implements equals and hashCode\n"
"}\n"
"\n"
"@Embeddable\n"
"class UserId implements Serializable {\n"
" String firstName;\n"
" String lastName;\n"
"\n"
" //implements equals and hashCode\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:737
#, no-c-format
msgid ""
"<classname>Customer and CustomerId do "
"have the same properties <literal>customerNumber as well as "
"<literal>user. CustomerId must be "
"<classname>Serializable and implement equals()hashCode() ."
msgstr ""
#. Tag: para
#: basic_mapping.xml:745
#, no-c-format
msgid ""
"While not JPA standard, Hibernate let's you declare the vanilla associated "
"property in the <classname>@IdClass."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:749
#, no-c-format
msgid ""
"@Entity\n"
"@IdClass(CustomerId.class)\n"
"class Customer implements Serializable {\n"
" @Id @OneToOne\n"
" @JoinColumns({\n"
" @JoinColumn(name=\"userfirstname_fk\", referencedColumnName=\"firstName"
"\"),\n"
" @JoinColumn(name=\"userlastname_fk\", referencedColumnName=\"lastName"
"\")\n"
" }) \n"
" User user;\n"
" \n"
" @Id String customerNumber;\n"
"\n"
" boolean preferredCustomer;\n"
"}\n"
"\n"
"class CustomerId implements Serializable {\n"
" @OneToOne User user;\n"
" String customerNumber;\n"
"\n"
" //implements equals and hashCode\n"
"}\n"
"\n"
"@Entity \n"
"class User {\n"
" @EmbeddedId UserId id;\n"
" Integer age;\n"
"\n"
" //implements equals and hashCode\n"
"}\n"
"\n"
"@Embeddable\n"
"class UserId implements Serializable {\n"
" String firstName;\n"
" String lastName;\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:751
#, no-c-format
msgid ""
"This feature is of limited interest though as you are likely to have chosen "
"the <classname>@IdClass approach to stay JPA compliant or you "
"have a quite twisted mind."
msgstr ""
#. Tag: para
#: basic_mapping.xml:755
#, no-c-format
msgid "Here are the equivalent on hbm.xml files:"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:757
#, no-c-format
msgid ""
"<class name=\"Customer\">\n"
" <composite-id class=\"CustomerId\" mapped=\"true\">\n"
" <key-many-to-one name=\"user\">\n"
" <column name=\"userfirstname_fk\"/>\n"
" <column name=\"userlastname_fk\"/>\n"
" </key-many-to-one>\n"
" <key-property name=\"customerNumber\"/>\n"
" </composite-id>\n"
"\n"
" <property name=\"preferredCustomer\"/>\n"
"</class>\n"
"\n"
"<class name=\"User\">\n"
" <composite-id name=\"id\" class=\"UserId\">\n"
" <key-property name=\"firstName\"/>\n"
" <key-property name=\"lastName\"/>\n"
" </composite-id>\n"
"\n"
" <property name=\"age\"/>\n"
"</class>"
msgstr ""
#. Tag: title
#: basic_mapping.xml:762
#, fuzzy, no-c-format
msgid "Identifier generator"
msgstr "å¢žå¼ºçš„æ ‡è¯†ç¬¦ç”Ÿæˆå™¨"
#. Tag: para
#: basic_mapping.xml:764
#, no-c-format
msgid ""
"Hibernate can generate and populate identifier values for you automatically. "
"This is the recommended approach over \"business\" or \"natural\" id "
"(especially composite ids)."
msgstr ""
#. Tag: para
#: basic_mapping.xml:768
#, no-c-format
msgid ""
"Hibernate offers various generation strategies, let's explore the most "
"common ones first that happens to be standardized by JPA:"
msgstr ""
#. Tag: para
#: basic_mapping.xml:774
#, fuzzy, no-c-format
msgid ""
"IDENTITY: supports identity columns in DB2, MySQL, MS SQL Server, Sybase and "
"HypersonicSQL. The returned identifier is of type <literal>long, "
"<literal>short or int ."
msgstr ""
"对 DB2,MySQL,MS SQL Server,Sybase å’Œ HypersonicSQL çš„å†…ç½®æ ‡è¯†å—段æ供支"
"æŒã€‚è¿”å›žçš„æ ‡è¯†ç¬¦æ˜¯ <literal>long,short 或者 "
"<literal>int 类型的。"
#. Tag: para
#: basic_mapping.xml:781
#, fuzzy, no-c-format
msgid ""
"SEQUENCE (called <literal>seqhilo in Hibernate): uses a hi/lo "
"algorithm to efficiently generate identifiers of type <literal>longshort or int , given a named "
"database sequence."
msgstr ""
"使用一个高/低ä½ç®—法æ¥é«˜æ•ˆçš„ç”Ÿæˆ <literal>long,shortint ç±»åž‹çš„æ ‡è¯†ç¬¦ï¼Œç»™å®šä¸€ä¸ªæ•°æ®åº“åºåˆ—"
"(sequence)çš„åå—。"
#. Tag: para
#: basic_mapping.xml:788
#, fuzzy, no-c-format
msgid ""
"TABLE (called <classname>MultipleHiLoPerTableGenerator in "
"Hibernate) : uses a hi/lo algorithm to efficiently generate identifiers of "
"type <literal>long, short or int,shortint ç±»åž‹çš„æ ‡è¯†ç¬¦ã€‚ç»™å®šä¸€ä¸ªè¡¨å’Œå—段(默认分别"
"是 <literal>hibernate_unique_key 和 next_hi )作"
"为高ä½å€¼çš„æ¥æºã€‚高/低ä½ç®—法生æˆçš„æ ‡è¯†ç¬¦åªåœ¨ä¸€ä¸ªç‰¹å®šçš„æ•°æ®åº“ä¸æ˜¯å”¯ä¸€çš„。"
#. Tag: para
#: basic_mapping.xml:798
#, fuzzy, no-c-format
msgid ""
"AUTO: selects <literal>IDENTITY, SEQUENCE or "
"<literal>TABLE depending upon the capabilities of the underlying "
"database."
msgstr ""
"æ ¹æ®åº•å±‚æ•°æ®åº“的能力选择 <literal>identityã€sequencehilo ä¸çš„一个。"
#. Tag: para
#: basic_mapping.xml:805
#, no-c-format
msgid ""
"We recommend all new projects to use the new enhanced identifier generators. "
"They are deactivated by default for entities using annotations but can be "
"activated using <code>hibernate.id.new_generator_mappings=true. These "
"new generators are more efficient and closer to the JPA 2 specification "
"semantic."
msgstr ""
#. Tag: para
#: basic_mapping.xml:812
#, no-c-format
msgid ""
"However they are not backward compatible with existing Hibernate based "
"application (if a sequence or a table is used for id generation). See "
"XXXXXXX <xref linkend=\"ann-setup-properties\"/> for more information on how "
"to activate them."
msgstr ""
#. Tag: para
#: basic_mapping.xml:818
#, no-c-format
msgid ""
"To mark an id property as generated, use the <classname>@GeneratedValue) by setting strategy ."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:823
#, no-c-format
msgid ""
"@Entity\n"
"public class Customer {\n"
" @Id @GeneratedValue\n"
" Integer getId() { ... };\n"
"}\n"
"\n"
"@Entity \n"
"public class Invoice {\n"
" @Id @GeneratedValue(strategy=GenerationType.IDENTITY)\n"
" Integer getId() { ... };\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:825
#, no-c-format
msgid ""
"<literal>SEQUENCE and TABLE require additional "
"configurations that you can set using <classname>@SequenceGenerator@TableGenerator:"
msgstr ""
#. Tag: para
#: basic_mapping.xml:832
#, fuzzy, no-c-format
msgid "<literal>name: name of the generator"
msgstr "<literal>name:属性å。"
#. Tag: para
#: basic_mapping.xml:836
#, fuzzy, no-c-format
msgid ""
"<literal>table / sequenceName : name of the "
"table or the sequence (defaulting respectively to "
"<literal>hibernate_sequences and hibernate_sequence(å¯é€‰ — 默认为 hibernate_sequence / schema :"
msgstr "<literal>serializable "
#. Tag: para
#: basic_mapping.xml:848
#, fuzzy, no-c-format
msgid ""
"<literal>initialValue : the value from which the id is to start "
"generating"
msgstr "<literal>table:被连接表的å称。 "
#. Tag: para
#: basic_mapping.xml:853
#, no-c-format
msgid ""
"<literal>allocationSize: the amount to increment by when "
"allocating id numbers from the generator"
msgstr ""
#. Tag: para
#: basic_mapping.xml:858
#, no-c-format
msgid ""
"In addition, the <classname>TABLE strategy also let you "
"customize:"
msgstr ""
#. Tag: para
#: basic_mapping.xml:863
#, fuzzy, no-c-format
msgid ""
"<literal>pkColumnName: the column name containing the entity "
"identifier"
msgstr "<literal>name:属性å。"
#. Tag: para
#: basic_mapping.xml:868
#, fuzzy, no-c-format
msgid ""
"<literal>valueColumnName: the column name containing the "
"identifier value"
msgstr "<literal>name(å¯é€‰ï¼‰ï¼šæ ‡è¯†å±žæ€§çš„åå—。 "
#. Tag: para
#: basic_mapping.xml:873
#, fuzzy, no-c-format
msgid "<literal>pkColumnValue: the entity identifier"
msgstr "<literal>id-typeï¼šæ ‡è¯†ç¬¦ç±»åž‹"
#. Tag: para
#: basic_mapping.xml:878
#, no-c-format
msgid ""
"<literal>uniqueConstraints: any potential column constraint on the "
"table containing the ids"
msgstr ""
#. Tag: para
#: basic_mapping.xml:883
#, no-c-format
msgid ""
"To link a table or sequence generator definition with an actual generated "
"property, use the same name in both the definition <literal>name "
"and the generator value <literal>generator as shown below."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:888
#, no-c-format
msgid ""
"@Id \n"
"@GeneratedValue(\n"
" strategy=GenerationType.SEQUENCE, \n"
" generator=\"SEQ_GEN\")\n"
"@javax.persistence.SequenceGenerator(\n"
" name=\"SEQ_GEN\",\n"
" sequenceName=\"my_sequence\",\n"
" allocationSize=20\n"
")\n"
"public Integer getId() { ... }"
msgstr ""
#. Tag: para
#: basic_mapping.xml:890
#, no-c-format
msgid ""
"The scope of a generator definition can be the application or the class. "
"Class-defined generators are not visible outside the class and can override "
"application level generators. Application level generators are defined in "
"JPA's XML deployment descriptors (see XXXXXX <xref linkend=\"xml-overriding"
"\"/>):"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:896
#, no-c-format
msgid ""
"<table-generator name=\"EMP_GEN\"\n"
" table=\"GENERATOR_TABLE\"\n"
" pk-column-name=\"key\"\n"
" value-column-name=\"hi\"\n"
" pk-column-value=\"EMP\"\n"
" allocation-size=\"20\"/>\n"
"\n"
"//and the annotation equivalent\n"
"\n"
"@javax.persistence.TableGenerator(\n"
" name=\"EMP_GEN\",\n"
" table=\"GENERATOR_TABLE\",\n"
" pkColumnName = \"key\",\n"
" valueColumnName = \"hi\"\n"
" pkColumnValue=\"EMP\",\n"
" allocationSize=20\n"
")\n"
"\n"
"<sequence-generator name=\"SEQ_GEN\" \n"
" sequence-name=\"my_sequence\"\n"
" allocation-size=\"20\"/>\n"
"\n"
"//and the annotation equivalent\n"
"\n"
"@javax.persistence.SequenceGenerator(\n"
" name=\"SEQ_GEN\",\n"
" sequenceName=\"my_sequence\",\n"
" allocationSize=20\n"
")"
msgstr ""
#. Tag: para
#: basic_mapping.xml:898
#, no-c-format
msgid ""
"If a JPA XML descriptor (like <filename>META-INF/orm.xml) is used "
"to define the generators, <literal>EMP_GEN and SEQ_GEN at the package level "
"(see <xref linkend=\"entity-hibspec-identifier\"/>)."
msgstr ""
#. Tag: para
#: basic_mapping.xml:910
#, no-c-format
msgid ""
"These are the four standard JPA generators. Hibernate goes beyond that and "
"provide additional generators or additional options as we will see below. "
"You can also write your own custom identifier generator by implementing "
"<classname>org.hibernate.id.IdentifierGenerator."
msgstr ""
#. Tag: para
#: basic_mapping.xml:916
#, no-c-format
msgid ""
"To define a custom generator, use the <classname>@GenericGenerator) that describes the class of the "
"identifier generator or its short cut name (as described below) and a list "
"of key/value parameters. When using <classname>@GenericGenerator "
"and assigning it via <classname>@GeneratedValue.generator, the "
"<classname>@GeneratedValue.strategy is ignored: leave it blank."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:926
#, no-c-format
msgid ""
"@Id @GeneratedValue(generator=\"system-uuid\")\n"
"@GenericGenerator(name=\"system-uuid\", strategy = \"uuid\")\n"
"public String getId() {\n"
"\n"
"@Id @GeneratedValue(generator=\"trigger-generated\")\n"
"@GenericGenerator(\n"
" name=\"trigger-generated\", \n"
" strategy = \"select\",\n"
" parameters = @Parameter(name=\"key\", value = \"socialSecurityNumber\")\n"
")\n"
"public String getId() {"
msgstr ""
#. Tag: para
#: basic_mapping.xml:928
#, fuzzy, no-c-format
msgid ""
"The hbm.xml approach uses the optional <literal><generator> "
"child element inside <literal><id>. If any parameters are "
"required to configure or initialize the generator instance, they are passed "
"using the <literal><param> element."
msgstr ""
"å¯é€‰çš„ <literal><generator> åå…ƒç´ æ˜¯ä¸€ä¸ª Java 类的åå—,用æ¥"
"为该æŒä¹…化类的实例生æˆå”¯ä¸€çš„æ ‡è¯†ã€‚å¦‚æžœè¿™ä¸ªç”Ÿæˆå™¨å®žä¾‹éœ€è¦æŸäº›é…置值或者åˆå§‹åŒ–"
"å‚数,用 <literal><param> å…ƒç´ æ¥ä¼ 递。"
#. Tag: programlisting
#: basic_mapping.xml:934
#, fuzzy, no-c-format
msgid ""
"<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
" <generator class=\"org.hibernate.id.TableHiLoGenerator\">\n"
" <param name=\"table\">uid_table</param>\n"
" <param name=\"column\">next_hi_value_column</"
"param>\n"
" </generator>\n"
"</id>"
msgstr ""
"<![CDATA[\n"
" <param name=\"column\">next_hi_value_column\n"
" </generator>\n"
"</id>]]>"
#. Tag: title
#: basic_mapping.xml:937
#, no-c-format
msgid "Various additional generators"
msgstr ""
#. Tag: para
#: basic_mapping.xml:939
#, no-c-format
msgid ""
"All generators implement the interface <literal>org.hibernate.id."
"IdentifierGenerator</literal>. This is a very simple interface. Some "
"applications can choose to provide their own specialized implementations, "
"however, Hibernate provides a range of built-in implementations. The "
"shortcut names for the built-in generators are as follows:"
msgstr ""
"所有的生æˆå™¨éƒ½å®žçŽ° <literal>org.hibernate.id.IdentifierGenerator 接"
"å£ã€‚这是一个éžå¸¸ç®€å•çš„接å£ï¼›æŸäº›åº”用程åºå¯ä»¥é€‰æ‹©æ供他们自己特定的实现。当"
"然,Hibernate æ供了很多内置的实现。下é¢æ˜¯ä¸€äº›å†…置生æˆå™¨çš„å¿«æ·åå—: "
#. Tag: literal
#: basic_mapping.xml:946
#, no-c-format
msgid "increment"
msgstr "increment"
#. Tag: para
#: basic_mapping.xml:949
#, no-c-format
msgid ""
"generates identifiers of type <literal>long, shortint that are unique only when no other "
"process is inserting data into the same table. <emphasis>Do not use in a "
"cluster.</emphasis>"
msgstr ""
"用于为 <literal>long, short 或者 int"
#. Tag: literal
#: basic_mapping.xml:958
#, no-c-format
msgid "identity"
msgstr "identity"
#. Tag: para
#: basic_mapping.xml:961
#, no-c-format
msgid ""
"supports identity columns in DB2, MySQL, MS SQL Server, Sybase and "
"HypersonicSQL. The returned identifier is of type <literal>long , "
"<literal>short or int ."
msgstr ""
"对 DB2,MySQL,MS SQL Server,Sybase å’Œ HypersonicSQL çš„å†…ç½®æ ‡è¯†å—段æ供支"
"æŒã€‚è¿”å›žçš„æ ‡è¯†ç¬¦æ˜¯ <literal>long,short 或者 "
"<literal>int 类型的。"
#. Tag: literal
#: basic_mapping.xml:969
#, no-c-format
msgid "sequence"
msgstr "sequence"
#. Tag: para
#: basic_mapping.xml:972
#, no-c-format
msgid ""
"uses a sequence in DB2, PostgreSQL, Oracle, SAP DB, McKoi or a generator in "
"Interbase. The returned identifier is of type <literal>long, "
"<literal>short or int "
msgstr ""
"在 DB2,PostgreSQL,Oracle,SAP DB,McKoi ä¸ä½¿ç”¨åºåˆ—(sequence), 而在 "
"Interbase ä¸ä½¿ç”¨ç”Ÿæˆå™¨ï¼ˆgeneratorï¼‰ã€‚è¿”å›žçš„æ ‡è¯†ç¬¦æ˜¯ <literal>long,"
"<literal>short 或者 int 类型的。"
#. Tag: literal
#: basic_mapping.xml:980
#, no-c-format
msgid "hilo"
msgstr "hilo"
#. Tag: para
#: basic_mapping.xml:984
#, no-c-format
msgid ""
"uses a hi/lo algorithm to efficiently generate identifiers of type "
"<literal>long, short or int , "
"given a table and column (by default <literal>hibernate_unique_key "
"and <literal>next_hi respectively) as a source of hi values. The "
"hi/lo algorithm generates identifiers that are unique only for a particular "
"database."
msgstr ""
"使用一个高/低ä½ç®—æ³•é«˜æ•ˆçš„ç”Ÿæˆ <literal>long,shortint ç±»åž‹çš„æ ‡è¯†ç¬¦ã€‚ç»™å®šä¸€ä¸ªè¡¨å’Œå—段(默认分别"
"是 <literal>hibernate_unique_key 和 next_hi )作"
"为高ä½å€¼çš„æ¥æºã€‚高/低ä½ç®—法生æˆçš„æ ‡è¯†ç¬¦åªåœ¨ä¸€ä¸ªç‰¹å®šçš„æ•°æ®åº“ä¸æ˜¯å”¯ä¸€çš„。"
#. Tag: literal
#: basic_mapping.xml:996
#, no-c-format
msgid "seqhilo"
msgstr "seqhilo"
#. Tag: para
#: basic_mapping.xml:999
#, no-c-format
msgid ""
"uses a hi/lo algorithm to efficiently generate identifiers of type "
"<literal>long, short or int , "
"given a named database sequence."
msgstr ""
"使用一个高/低ä½ç®—法æ¥é«˜æ•ˆçš„ç”Ÿæˆ <literal>long,shortint ç±»åž‹çš„æ ‡è¯†ç¬¦ï¼Œç»™å®šä¸€ä¸ªæ•°æ®åº“åºåˆ—"
"(sequence)çš„åå—。"
#. Tag: literal
#: basic_mapping.xml:1007
#, fuzzy, no-c-format
msgid "uuid"
msgstr "guid"
#. Tag: para
#: basic_mapping.xml:1010
#, no-c-format
msgid ""
"Generates a 128-bit UUID based on a custom algorithm. The value generated is "
"represented as a string of 32 hexidecimal digits. Users can also configure "
"it to use a separator (config parameter \"separator\") which separates the "
"hexidecimal digits into 8{sep}8{sep}4{sep}8{sep}4. Note specifically that "
"this is different than the IETF RFC 4122 representation of 8-4-4-4-12. If "
"you need RFC 4122 compliant UUIDs, consider using \"uuid2\" generator "
"discussed below."
msgstr ""
#. Tag: literal
#: basic_mapping.xml:1023
#, fuzzy, no-c-format
msgid "uuid2"
msgstr "guid"
#. Tag: para
#: basic_mapping.xml:1026
#, no-c-format
msgid ""
"Generates a IETF RFC 4122 compliant (variant 2) 128-bit UUID. The exact "
"\"version\" (the RFC term) generated depends on the pluggable \"generation "
"strategy\" used (see below). Capable of generating values as <classname>java."
"util.UUID</classname>, java.lang.String or as a byte "
"array of length 16 (<literal>byte[16]). The \"generation strategy"
"\" is defined by the interface <interfacename>org.hibernate.id."
"UUIDGenerationStrategy</interfacename>. The generator defines 2 "
"configuration parameters for defining which generation strategy to use:"
msgstr ""
#. Tag: literal
#: basic_mapping.xml:1038
#, no-c-format
msgid "uuid_gen_strategy_class"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1041
#, no-c-format
msgid "Names the UUIDGenerationStrategy class to use"
msgstr ""
#. Tag: literal
#: basic_mapping.xml:1047
#, no-c-format
msgid "uuid_gen_strategy"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1050
#, no-c-format
msgid "Names the UUIDGenerationStrategy instance to use"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1056
#, no-c-format
msgid "Out of the box, comes with the following strategies:"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1059
#, no-c-format
msgid ""
"<classname>org.hibernate.id.uuid.StandardRandomStrategy (the "
"default) - generates \"version 3\" (aka, \"random\") UUID values via the "
"<methodname>randomUUID method of java.util.UUID - "
"generates \"version 1\" UUID values, using IP address since mac address not "
"available. If you need mac address to be used, consider leveraging one of "
"the existing third party UUID generators which sniff out mac address and "
"integrating it via the <interfacename>org.hibernate.id."
"UUIDGenerationStrategy</interfacename> contract. Two such libraries known at "
"time of this writing include <ulink url=\"http://johannburkard.de/software/"
"uuid/\">http://johannburkard.de/software/uuid/</ulink> and , sequence or "
"<literal>hilo depending upon the capabilities of the underlying "
"database."
msgstr ""
"æ ¹æ®åº•å±‚æ•°æ®åº“的能力选择 <literal>identityã€sequencehilo ä¸çš„一个。"
#. Tag: literal
#: basic_mapping.xml:1105
#, no-c-format
msgid "assigned"
msgstr "assigned"
#. Tag: para
#: basic_mapping.xml:1108
#, no-c-format
msgid ""
"lets the application assign an identifier to the object before <literal>save"
"()</literal> is called. This is the default strategy if no <"
"generator></literal> element is specified."
msgstr ""
"让应用程åºåœ¨è°ƒç”¨ <literal>save() 之å‰ä¸ºå¯¹è±¡åˆ†é…ä¸€ä¸ªæ ‡è¯†ç¬¦ã€‚è¿™æ˜¯ "
"<literal><generator> å…ƒç´ æ²¡æœ‰æŒ‡å®šæ—¶çš„é»˜è®¤ç”Ÿæˆç–略。"
#. Tag: literal
#: basic_mapping.xml:1117
#, no-c-format
msgid "select"
msgstr "select"
#. Tag: para
#: basic_mapping.xml:1120
#, no-c-format
msgid ""
"retrieves a primary key, assigned by a database trigger, by selecting the "
"row by some unique key and retrieving the primary key value."
msgstr "通过数æ®åº“触å‘器选择一些唯一主键的行并返回主键值æ¥åˆ†é…一个主键。 "
#. Tag: literal
#: basic_mapping.xml:1127
#, no-c-format
msgid "foreign"
msgstr "foreign"
#. Tag: para
#: basic_mapping.xml:1130
#, no-c-format
msgid ""
"uses the identifier of another associated object. It is usually used in "
"conjunction with a <literal><one-to-one> primary key "
"association."
msgstr ""
"使用å¦å¤–一个相关è”çš„å¯¹è±¡çš„æ ‡è¯†ç¬¦ã€‚å®ƒé€šå¸¸å’Œ <literal><one-to-one>"
#. Tag: para
#: basic_mapping.xml:1141
#, no-c-format
msgid ""
"a specialized sequence generation strategy that utilizes a database sequence "
"for the actual value generation, but combines this with JDBC3 "
"getGeneratedKeys to return the generated identifier value as part of the "
"insert statement execution. This strategy is only supported on Oracle 10g "
"drivers targeted for JDK 1.4. Comments on these insert statements are "
"disabled due to a bug in the Oracle drivers."
msgstr ""
"一ç§ç‰¹åˆ«çš„åºåˆ—生æˆç–略,它使用数æ®åº“åºåˆ—æ¥ç”Ÿæˆå®žé™…值,但将它和 JDBC3 çš„ "
"getGeneratedKeys 结åˆåœ¨ä¸€èµ·ï¼Œä½¿å¾—在æ’å…¥è¯å¥æ‰§è¡Œçš„时候就返回生æˆçš„值。目å‰ä¸ºæ¢"
"åªæœ‰é¢å‘ JDK 1.4 çš„ Oracle 10g 驱动支æŒè¿™ä¸€ç–略。由于 Oracle 驱动程åºçš„一个 "
"bug,这些æ’å…¥è¯å¥çš„注释被关é—了。"
#. Tag: title
#: basic_mapping.xml:1155
#, no-c-format
msgid "Hi/lo algorithm"
msgstr "高/低ä½ç®—法(Hi/Lo Algorithm)"
#. Tag: para
#: basic_mapping.xml:1157
#, no-c-format
msgid ""
"The <literal>hilo and seqhilo generators "
"provide two alternate implementations of the hi/lo algorithm. The first "
"implementation requires a \"special\" database table to hold the next "
"available \"hi\" value. Where supported, the second uses an Oracle-style "
"sequence."
msgstr ""
"<literal>hilo å’Œ seqhilo 生æˆå™¨ç»™å‡ºäº†ä¸¤ç§ hi/lo "
"算法的实现, 这是一ç§å¾ˆä»¤äººæ»¡æ„çš„æ ‡è¯†ç¬¦ç”Ÿæˆç®—法。第一ç§å®žçŽ°éœ€è¦ä¸€ä¸ªâ€œç‰¹æ®Šâ€çš„æ•°"
"æ®åº“表æ¥ä¿å˜ä¸‹ä¸€ä¸ªå¯ç”¨çš„“hiâ€å€¼ã€‚ 第二ç§å®žçŽ°ä½¿ç”¨ä¸€ä¸ª Oracle é£Žæ ¼çš„åºåˆ—(在被支"
"æŒçš„情况下)。 "
#. Tag: programlisting
#: basic_mapping.xml:1163
#, fuzzy, no-c-format
msgid ""
"<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
" <generator class=\"hilo\">\n"
" <param name=\"table\">hi_value</param>\n"
" <param name=\"column\">next_value</param>\n"
" <param name=\"max_lo\">100</param>\n"
" </generator>\n"
"</id>"
msgstr ""
"<![CDATA[\n"
" <param name=\"column\">next_value\n"
" <param name=\"max_lo\">100\n"
" </generator>\n"
"</id>]]>"
#. Tag: programlisting
#: basic_mapping.xml:1165
#, fuzzy, no-c-format
msgid ""
"<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
" <generator class=\"seqhilo\">\n"
" <param name=\"sequence\">hi_value</param>\n"
" <param name=\"max_lo\">100</param>\n"
" </generator>\n"
"</id>"
msgstr ""
"<![CDATA[\n"
" <param name=\"max_lo\">100\n"
" </generator>\n"
"</id>]]>"
#. Tag: para
#: basic_mapping.xml:1167
#, no-c-format
msgid ""
"Unfortunately, you cannot use <literal>hilo when supplying your "
"own <literal>Connection to Hibernate. When Hibernate uses an "
"application server datasource to obtain connections enlisted with JTA, you "
"must configure the <literal>hibernate.transaction.manager_lookup_class æ—¶æ— æ³•ä½¿ç”¨ "
"<literal>hilo。 当 Hibernate 使用 JTA 获å–应用æœåŠ¡å™¨çš„æ•°æ®æºè¿žæŽ¥"
"æ—¶ï¼Œä½ å¿…é¡»æ£ç¡®åœ°é…ç½® <literal>hibernate.transaction.manager_lookup_class key generation. For databases that "
"support sequences (DB2, Oracle, PostgreSQL, Interbase, McKoi, SAP DB) you "
"can use <literal>sequence style key generation. Both of these "
"strategies require two SQL queries to insert a new object. For example:"
msgstr ""
"对于内部支æŒæ ‡è¯†å—段的数æ®åº“(DB2ã€MySQLã€Sybase å’Œ MS SQLï¼‰ï¼Œä½ å¯ä»¥ä½¿ç”¨ "
"<literal>identity 关键å—生æˆã€‚对于内部支æŒåºåˆ—çš„æ•°æ®åº“(DB2ã€"
"Oracleã€PostgreSQLã€Interbaseã€McKoi å’Œ SAP DBï¼‰ï¼Œä½ å¯ä»¥ä½¿ç”¨ "
"<literal>sequence é£Žæ ¼çš„å…³é”®å—生æˆã€‚这两ç§æ–¹å¼å¯¹äºŽæ’入一个新的对象"
"都需è¦ä¸¤æ¬¡ SQL 查询。例如:"
#. Tag: programlisting
#: basic_mapping.xml:1195
#, fuzzy, no-c-format
msgid ""
"<id name=\"id\" type=\"long\" column=\"person_id\">\n"
" <generator class=\"sequence\">\n"
" <param name=\"sequence\">person_id_sequence</"
"param>\n"
" </generator>\n"
"</id>"
msgstr ""
"<![CDATA[\n"
" </generator>\n"
"</id>]]>"
#. Tag: programlisting
#: basic_mapping.xml:1197
#, fuzzy, no-c-format
msgid ""
"<id name=\"id\" type=\"long\" column=\"person_id\" unsaved-value=\"0"
"\">\n"
" <generator class=\"identity\"/>\n"
"</id>"
msgstr ""
"<![CDATA["
#. Tag: para
#: basic_mapping.xml:1199
#, no-c-format
msgid ""
"For cross-platform development, the <literal>native strategy will, "
"depending on the capabilities of the underlying database, choose from the "
"<literal>identity, sequence and hilo ç–略会从 identitysequence å’Œ hilo ä¸è¿›è¡Œé€‰æ‹©ï¼Œ"
"选择哪一个,这å–决于底层数æ®åº“的支æŒèƒ½åŠ›ã€‚"
#. Tag: title
#: basic_mapping.xml:1207
#, no-c-format
msgid "Assigned identifiers"
msgstr "程åºåˆ†é…çš„æ ‡è¯†ç¬¦ï¼ˆAssigned Identifiers)"
#. Tag: para
#: basic_mapping.xml:1209
#, fuzzy, no-c-format
msgid ""
"If you want the application to assign identifiers, as opposed to having "
"Hibernate generate them, you can use the <literal>assigned "
"generator. This special generator uses the identifier value already assigned "
"to the object's identifier property. The generator is used when the primary "
"key is a natural key instead of a surrogate key. This is the default "
"behavior if you do not specify <classname>@GeneratedValue nor "
"<literal><generator> elements."
msgstr ""
"å¦‚æžœä½ éœ€è¦åº”用程åºåˆ†é…ä¸€ä¸ªæ ‡ç¤ºç¬¦ï¼ˆè€Œéž Hibernate æ¥ç”Ÿæˆï¼‰ï¼Œä½ å¯ä»¥ä½¿ç”¨ "
"<literal>assigned 生æˆå™¨ã€‚è¿™ç§ç‰¹æ®Šçš„生æˆå™¨ä¼šä½¿ç”¨å·²ç»åˆ†é…ç»™å¯¹è±¡çš„æ ‡"
"è¯†ç¬¦å±žæ€§çš„æ ‡è¯†ç¬¦å€¼ã€‚ 这个生æˆå™¨ä½¿ç”¨ä¸€ä¸ªè‡ªç„¶é”®ï¼ˆnatural key,有商业æ„义的列ï¼"
"译注)作为主键,而ä¸æ˜¯ä½¿ç”¨ä¸€ä¸ªä»£ç†é”®ï¼ˆ surrogate key,没有商业æ„义的列ï¼è¯‘"
"注)。这是没有指定 <literal><generator> å…ƒç´ æ—¶çš„é»˜è®¤è¡Œä¸ºã€‚"
#. Tag: para
#: basic_mapping.xml:1218
#, no-c-format
msgid ""
"The <literal>assigned generator makes Hibernate use "
"<literal>unsaved-value=\"undefined\". This forces Hibernate to go "
"to the database to determine if an instance is transient or detached, unless "
"there is a version or timestamp property, or you define <literal>Interceptor."
"isUnsaved()</literal>."
msgstr ""
"当选择 <literal>assigned 生æˆå™¨æ—¶ï¼Œé™¤éžæœ‰ä¸€ä¸ª version 或 timestamp "
"å±žæ€§ï¼Œæˆ–è€…ä½ å®šä¹‰äº† <literal>Interceptor.isUnsaved(),å¦åˆ™éœ€è¦è®© "
"Hiberante 使用 <literal>unsaved-value=\"undefined\",强制 "
"Hibernatet 查询数æ®åº“æ¥ç¡®å®šä¸€ä¸ªå®žä¾‹æ˜¯çž¬æ—¶çš„(transient) 还是脱管的"
"(detached)。"
#. Tag: title
#: basic_mapping.xml:1226
#, no-c-format
msgid "Primary keys assigned by triggers"
msgstr "触å‘器实现的主键生æˆå™¨ï¼ˆPrimary keys assigned by triggers)"
#. Tag: para
#: basic_mapping.xml:1228
#, no-c-format
msgid ""
"Hibernate does not generate DDL with triggers. It is for legacy schemas only."
msgstr "仅仅用于é—留的 schema ä¸ï¼ˆHibernate ä¸èƒ½ç”¨è§¦å‘å™¨ç”Ÿæˆ DDL)。"
#. Tag: programlisting
#: basic_mapping.xml:1231
#, fuzzy, no-c-format
msgid ""
"<id name=\"id\" type=\"long\" column=\"person_id\">\n"
" <generator class=\"select\">\n"
" <param name=\"key\">socialSecurityNumber</"
"param>\n"
" </generator>\n"
"</id>"
msgstr ""
"<![CDATA[\n"
" </generator>\n"
"</id>]]>"
#. Tag: para
#: basic_mapping.xml:1233
#, no-c-format
msgid ""
"In the above example, there is a unique valued property named "
"<literal>socialSecurityNumber. It is defined by the class, as a "
"natural key and a surrogate key named <literal>person_id, whose "
"value is generated by a trigger."
msgstr ""
"在上é¢çš„例åä¸ï¼Œç±»å®šä¹‰äº†ä¸€ä¸ªå‘½å为 <literal>socialSecurityNumber çš„"
"具有唯一值的属性,它是一个自然键(natural key),命å为 <literal>person_id generator and, secondly, as "
"a better portability generator than <literal>native. This is "
"because <literal>native generally chooses between "
"<literal>identity and sequence which have "
"largely different semantics that can cause subtle issues in applications "
"eyeing portability. <literal>org.hibernate.id.enhanced."
"SequenceStyleGenerator</literal>, however, achieves portability in a "
"different manner. It chooses between a table or a sequence in the database "
"to store its incrementing values, depending on the capabilities of the "
"dialect being used. The difference between this and <literal>nativesequence "
"生æˆå™¨çš„替代物,其次,它是比 <literal>native 具有更好移æ¤æ€§çš„生æˆ"
"å™¨ã€‚è¿™æ˜¯å› ä¸º <literal>native 通常在 identity å’Œ "
"<literal>sequence 之间选择,它有差别很大的 semantic,在移æ¤æ—¶ä¼šå¯¼è‡´"
"潜在的问题。然而,<literal>org.hibernate.id.enhanced.SequenceStyleGenerator 的区别是基于表或åºåˆ—çš„å˜å‚¨"
"具有æ°å¥½ç›¸åŒçš„ semantic。实际上,åºåˆ—就是 Hibernate 试图用基于表的生æˆå™¨æ¥æ¨¡"
"拟的。这个生æˆå™¨æœ‰å¦‚下的é…ç½®å‚数:"
#. Tag: para
#: basic_mapping.xml:1291
#, no-c-format
msgid ""
"<literal>sequence_name (optional, defaults to "
"<literal>hibernate_sequence): the name of the sequence or table to "
"be used."
msgstr ""
"<literal>sequence_name(å¯é€‰ — 默认为 hibernate_sequence (optional, defaults to 1(å¯é€‰ï¼Œé»˜è®¤ä¸º 1 ):从åº"
"列/表里获å–çš„åˆå§‹å€¼ã€‚按照åºåˆ—创建的术è¯ï¼Œè¿™ç‰åŒäºŽåå¥ \"STARTS WITH\"。"
#. Tag: para
#: basic_mapping.xml:1304
#, no-c-format
msgid ""
"<literal>increment_size (optional - defaults to 1(å¯é€‰ - 缺çœä¸º 1 ):对åº"
"列/表的调用应该区分的值。按照åºåˆ—创建的术è¯ï¼Œè¿™ç‰åŒäºŽåå¥ \"INCREMENT BY\"。"
#. Tag: para
#: basic_mapping.xml:1312
#, no-c-format
msgid ""
"<literal>force_table_use (optional - defaults to false(å¯é€‰ - 缺çœä¸º false (optional - defaults to next_val(å¯é€‰ - 缺çœä¸º next_val (optional - defaults to none(å¯é€‰ — 默认是none ):级è”çš„ç±»"
"型。"
#. Tag: para
#: basic_mapping.xml:1332
#, no-c-format
msgid ""
"The second of these new generators is <literal>org.hibernate.id.enhanced."
"TableGenerator</literal>, which is intended, firstly, as a replacement for "
"the <literal>table generator, even though it actually functions "
"much more like <literal>org.hibernate.id.MultipleHiLoPerTableGeneratororg.hibernate.id."
"MultipleHiLoPerTableGenerator</literal> that utilizes the notion of "
"pluggable optimizers. Essentially this generator defines a table capable of "
"holding a number of different increment values simultaneously by using "
"multiple distinctly keyed rows. This generator has a number of configuration "
"parameters:"
msgstr ""
"新生æˆå™¨çš„第二个是 <literal>org.hibernate.id.enhanced.TableGeneratortable 生æˆå™¨ï¼Œå³ä½¿å®ƒå®žé™…上比 "
"<literal>org.hibernate.id.MultipleHiLoPerTableGenerator 功能è¦å¼ºå¾—"
"多;其次,作为利用å¯æ’æ‹” optimizer çš„ <literal>org.hibernate.id."
"MultipleHiLoPerTableGenerator</literal> 的替代å“。基本上这个生æˆå™¨å®šä¹‰äº†ä¸€ä¸ª"
"å¯ä»¥åˆ©ç”¨å¤šä¸ªä¸åŒçš„键值记录å˜å‚¨å¤§é‡ä¸åŒå¢žé‡å€¼çš„表。这个生æˆå™¨æœ‰å¦‚下的é…ç½®å‚"
"数:"
#. Tag: para
#: basic_mapping.xml:1345
#, no-c-format
msgid ""
"<literal>table_name (optional - defaults to "
"<literal>hibernate_sequences ): the name of the table to be used."
msgstr ""
"<literal>table_name (å¯é€‰ — 默认是 hibernate_sequences (optional - defaults to "
"<literal>next_val ): the name of the column on the table that is "
"used to hold the value."
msgstr ""
"<literal>value_column_name(å¯é€‰ — 默认为 next_val (optional - defaults to "
"<literal>sequence_name ): the name of the column on the table that "
"is used to hold the \"segment key\". This is the value which identifies "
"which increment value to use."
msgstr ""
"<literal>segment_column_name(å¯é€‰ï¼Œé»˜è®¤ä¸º sequence_name (optional - defaults to default(å¯é€‰ï¼Œé»˜è®¤ä¸º default ):"
"我们为这个生æˆå™¨èŽ·å–增é‡å€¼çš„ segment çš„ \"segment key\"。"
#. Tag: para
#: basic_mapping.xml:1372
#, no-c-format
msgid ""
"<literal>segment_value_length (optional - defaults to "
"<literal>255 ): Used for schema generation; the column size to "
"create this segment key column."
msgstr ""
"<literal>segment_value_length(å¯é€‰ — 默认为 255 (optional - defaults to 1(å¯é€‰ — 默认是 1 ):从表"
"里获å–çš„åˆå§‹å€¼ã€‚"
#. Tag: para
#: basic_mapping.xml:1384
#, no-c-format
msgid ""
"<literal>increment_size (optional - defaults to 1(å¯é€‰ — 默认是 1 ):对表"
"éšåŽçš„调用应该区分的值。"
#. Tag: para
#: basic_mapping.xml:1390
#, fuzzy, no-c-format
msgid ""
"<literal>optimizer (optional - defaults to ?? ): "
"See <xref linkend=\"mapping-declaration-id-enhanced-optimizers\"/>."
msgstr ""
"<literal>optimizer (å¯é€‰ — 默认是 ):请å‚考 "
"<xref linkend=\"mapping-declaration-id-enhanced-optimizers\" />。"
#. Tag: title
#: basic_mapping.xml:1397
#, no-c-format
msgid "Identifier generator optimization"
msgstr "æ ‡è¯†ç¬¦ç”Ÿæˆå™¨çš„优化"
#. Tag: para
#: basic_mapping.xml:1399
#, fuzzy, no-c-format
msgid ""
"For identifier generators that store values in the database, it is "
"inefficient for them to hit the database on each and every call to generate "
"a new identifier value. Instead, you can group a bunch of them in memory and "
"only hit the database when you have exhausted your in-memory value group. "
"This is the role of the pluggable optimizers. Currently only the two "
"enhanced generators (<xref linkend=\"mapping-declaration-id-enhanced\"/> "
"support this operation."
msgstr ""
"对于在数æ®åº“里å˜å‚¨å€¼çš„æ ‡è¯†ç¬¦ç”Ÿæˆå™¨ï¼Œç”Ÿæˆæ–°æ ‡è¯†ç¬¦æ—¶çš„æ¯æ¬¡è°ƒç”¨éƒ½è®¿é—®æ•°æ®åº“是低"
"æ•ˆçš„ã€‚å› æ¤ï¼Œä½ å¯ä»¥æŠŠå®ƒä»¬åœ¨å†…å˜é‡Œåˆ†ç»„并åªæœ‰åœ¨å¿«ç”¨å…‰å†…å˜æ—¶æ‰è®¿é—®æ•°æ®åº“。这是å¯"
"æ’æ‹” optimizer 的任务。目å‰åªæœ‰ä¸¤ä¸ªå¢žå¼ºåž‹çš„生æˆå™¨æ”¯æŒè¿™ä¸ªæ“作(<xref linkend="
"\"mapping-declaration-id-enhanced\"/>)。 "
#. Tag: para
#: basic_mapping.xml:1410
#, no-c-format
msgid ""
"<literal>none (generally this is the default if no optimizer was "
"specified): this will not perform any optimizations and hit the database for "
"each and every request."
msgstr ""
"<literal>none(如果没有指定 optimizer,通常这是缺çœé…置):这ä¸ä¼šæ‰§"
"行任何优化,在æ¯æ¬¡è¯·æ±‚时都访问数æ®åº“。"
#. Tag: para
#: basic_mapping.xml:1417
#, no-c-format
msgid ""
"<literal>hilo: applies a hi/lo algorithm around the database "
"retrieved values. The values from the database for this optimizer are "
"expected to be sequential. The values retrieved from the database structure "
"for this optimizer indicates the \"group number\". The "
"<literal>increment_size is multiplied by that value in memory to "
"define a group \"hi value\"."
msgstr ""
"<literal>hilo:对从数æ®åº“获å–的值应用 hi/lo 算法。用于这个 "
"optimizer 的从数æ®åº“获å–的值应该是有åºçš„。它们表明“组编å·â€ã€‚"
"<literal>increment_size 将乘以内å˜é‡Œçš„值æ¥å®šä¹‰ç»„的“hi 值â€ã€‚"
#. Tag: para
#: basic_mapping.xml:1427
#, no-c-format
msgid ""
"<literal>pooled: as with the case of hilo , this "
"optimizer attempts to minimize the number of hits to the database. Here, "
"however, we simply store the starting value for the \"next group\" into the "
"database structure rather than a sequential value in combination with an in-"
"memory grouping algorithm. Here, <literal>increment_size refers to "
"the values coming from the database."
msgstr ""
"<literal>pooled:和 hilo ä¸€æ ·ï¼Œè¿™ä¸ª optimizer 试"
"图最å°åŒ–对数æ®åº“的访问。然而,我们åªæ˜¯ç®€å•åœ°æŠŠâ€œä¸‹ä¸€ç»„â€çš„起始值而ä¸æ˜¯æŠŠåºåˆ—值"
"和分组算法的组åˆå˜å…¥åˆ°æ•°æ®åº“结构里。在这里,<literal>increment_size annotation "
"on one or several id properties."
msgstr ""
#. Tag: para
#: basic_mapping.xml:1449
#, no-c-format
msgid ""
"The Hibernate team has always felt such a construct as fundamentally wrong. "
"Try hard to fix your data model before using this feature."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:1454
#, no-c-format
msgid ""
"@Entity\n"
"public class CustomerInventory implements Serializable {\n"
" @Id\n"
" @TableGenerator(name = \"inventory\",\n"
" table = \"U_SEQUENCES\",\n"
" pkColumnName = \"S_ID\",\n"
" valueColumnName = \"S_NEXTNUM\",\n"
" pkColumnValue = \"inventory\",\n"
" allocationSize = 1000)\n"
" @GeneratedValue(strategy = GenerationType.TABLE, generator = \"inventory"
"\")\n"
" Integer id;\n"
"\n"
"\n"
" @Id @ManyToOne(cascade = CascadeType.MERGE)\n"
" Customer customer;\n"
"}\n"
"\n"
"@Entity\n"
"public class Customer implements Serializable {\n"
" @Id\n"
" private int id;\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1456
#, no-c-format
msgid ""
"You can also generate properties inside an <classname>@EmbeddedIdDeclaring a nullable version or "
"timestamp property is an easy way to avoid problems with transitive "
"reattachment in Hibernate. It is especially useful for people using assigned "
"identifiers or composite keys</emphasis>."
msgstr ""
"一个脱管(detached)实例的 version 或 timestamp 属性ä¸èƒ½ä¸ºç©ºï¼ˆnullï¼‰ï¼Œå› ä¸º "
"Hibernate ä¸ç®¡ <literal>unsaved-value 被指定为何ç§ç–略,它将任何属"
"性为空的 version 或 timestamp 实例看作为瞬时(transient)实例。 <emphasis>é¿"
"å… Hibernate ä¸çš„ä¼ é€’é‡é™„(transitive reattachment)问题的一个简å•æ–¹æ³•æ˜¯ 定义"
"一个ä¸èƒ½ä¸ºç©ºçš„ version 或 timestamp 属性,特别是在人们使用程åºåˆ†é…çš„æ ‡è¯†ç¬¦"
"(assigned identifiers) 或å¤åˆä¸»é”®æ—¶éžå¸¸æœ‰ç”¨</emphasis>。"
#. Tag: title
#: basic_mapping.xml:1485
#, no-c-format
msgid "Version number"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1487
#, no-c-format
msgid ""
"You can add optimistic locking capability to an entity using the "
"<literal>@Version annotation:"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:1490
#, no-c-format
msgid ""
"@Entity\n"
"public class Flight implements Serializable {\n"
"...\n"
" @Version\n"
" @Column(name=\"OPTLOCK\")\n"
" public Integer getVersion() { ... }\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1492
#, no-c-format
msgid ""
"The version property will be mapped to the <literal>OPTLOCK "
"column, and the entity manager will use it to detect conflicting updates "
"(preventing lost updates you might otherwise see with the last-commit-wins "
"strategy)."
msgstr ""
#. Tag: para
#: basic_mapping.xml:1497
#, no-c-format
msgid ""
"The version column may be a numeric. Hibernate supports any kind of type "
"provided that you define and implement the appropriate "
"<classname>UserVersionType."
msgstr ""
#. Tag: para
#: basic_mapping.xml:1501
#, no-c-format
msgid ""
"The application must not alter the version number set up by Hibernate in any "
"way. To artificially increase the version number, check in Hibernate Entity "
"Manager's reference documentation <literal>LockModeType."
"OPTIMISTIC_FORCE_INCREMENT</literal> or LockModeType."
"PESSIMISTIC_FORCE_INCREMENT</literal>."
msgstr ""
#. Tag: para
#: basic_mapping.xml:1507
#, no-c-format
msgid ""
"If the version number is generated by the database (via a trigger for "
"example), make sure to use <code>@org.hibernate.annotations.Generated"
"(GenerationTime.ALWAYS).</code>"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1511
#, no-c-format
msgid "To declare a version property in hbm.xml, use:"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:1530
#, fuzzy, no-c-format
msgid ""
"<version\n"
" column=\"version_column\"\n"
" name=\"propertyName\"\n"
" type=\"typename\"\n"
" access=\"field|property|ClassName\"\n"
" unsaved-value=\"null|negative|undefined\"\n"
" generated=\"never|always\"\n"
" insert=\"true|false\"\n"
" node=\"element-name|@attribute-name|element/@attribute|.\"\n"
"/>"
msgstr ""
"<![CDATA["
#. Tag: para
#: basic_mapping.xml:1534
#, no-c-format
msgid ""
"<literal>column (optional - defaults to the property name): the "
"name of the column holding the version number."
msgstr ""
"<literal>column(å¯é€‰ — 默认为属性å):指定æŒæœ‰ç‰ˆæœ¬å·çš„å—段å。 "
#. Tag: para
#: basic_mapping.xml:1540
#, no-c-format
msgid ""
"<literal>name: the name of a property of the persistent class."
msgstr "<literal>name:æŒä¹…化类的属性å。 "
#. Tag: para
#: basic_mapping.xml:1545
#, no-c-format
msgid ""
"<literal>type (optional - defaults to integer ): "
"the type of the version number."
msgstr ""
"<literal>type(å¯é€‰ — 默认是 integer ):版本å·çš„"
"类型。 "
#. Tag: para
#: basic_mapping.xml:1551
#, no-c-format
msgid ""
"<literal>access (optional - defaults to property(å¯é€‰ — 默认为 property ):"
"Hibernate 用æ¥è®¿é—®å±žæ€§å€¼çš„ç–略。 "
#. Tag: para
#: basic_mapping.xml:1557
#, no-c-format
msgid ""
"<literal>unsaved-value (optional - defaults to undefined "
"specifies that the identifier property value should be used."
msgstr ""
"<literal>unsaved-value (å¯é€‰ — 默认是 undefined æŒ‡æ˜Žåº”è¢«ä½¿ç”¨çš„æ ‡è¯†å±žæ€§å€¼ã€‚ï¼‰ "
#. Tag: para
#: basic_mapping.xml:1567
#, no-c-format
msgid ""
"<literal>generated (optional - defaults to never for more information."
msgstr ""
"<literal>generated (å¯é€‰ — 默认是 never ):表明"
"æ¤ç‰ˆæœ¬å±žæ€§å€¼æ˜¯å¦å®žé™…上是由数æ®åº“生æˆçš„。请å‚阅 <link linkend=\"mapping-"
"generated\">generated properties</link> 部分的讨论。 "
#. Tag: para
#: basic_mapping.xml:1575
#, no-c-format
msgid ""
"<literal>insert (optional - defaults to true ): "
"specifies whether the version column should be included in SQL insert "
"statements. It can be set to <literal>false if the database column "
"is defined with a default value of <literal>0."
msgstr ""
"<literal>insert(å¯é€‰ — 默认是 true ):表明æ¤ç‰ˆ"
"本列应该包å«åœ¨ SQL æ’å…¥è¯å¥ä¸ã€‚åªæœ‰å½“æ•°æ®åº“å—段有默认值 <literal>0 "
"的时候,æ‰å¯ä»¥è®¾ç½®ä¸º <literal>false。 "
#. Tag: title
#: basic_mapping.xml:1586
#, fuzzy, no-c-format
msgid "Timestamp"
msgstr "timestamp(å¯é€‰) "
#. Tag: para
#: basic_mapping.xml:1588
#, fuzzy, no-c-format
msgid ""
"Alternatively, you can use a timestamp. Timestamps are a less safe "
"implementation of optimistic locking. However, sometimes an application "
"might use the timestamps in other ways as well."
msgstr ""
"å¯é€‰çš„ <literal><timestamp> å…ƒç´ æŒ‡æ˜Žäº†è¡¨ä¸åŒ…å«æ—¶é—´æˆ³æ•°æ®ã€‚è¿™"
"用æ¥ä½œä¸ºç‰ˆæœ¬çš„替代。时间戳本质上是一ç§å¯¹ä¹è§‚é”定的一ç§ä¸æ˜¯ç‰¹åˆ«å®‰å…¨çš„实现。当"
"然,有时候应用程åºå¯èƒ½åœ¨å…¶ä»–æ–¹é¢ä½¿ç”¨æ—¶é—´æˆ³ã€‚ "
#. Tag: para
#: basic_mapping.xml:1592
#, no-c-format
msgid ""
"Simply mark a property of type <classname>Date or "
"<classname>Calendar as @Version ."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:1596
#, no-c-format
msgid ""
"@Entity\n"
"public class Flight implements Serializable {\n"
"...\n"
" @Version\n"
" public Date getLastUpdate() { ... }\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1598
#, no-c-format
msgid ""
"When using timestamp versioning you can tell Hibernate where to retrieve the "
"timestamp value from - database or JVM - by optionally adding the "
"<classname>@org.hibernate.annotations.Source annotation to the "
"property. Possible values for the value attribute of the annotation are "
"<classname>org.hibernate.annotations.SourceType.VM and "
"<classname>org.hibernate.annotations.SourceType.DB. The default "
"is <classname>SourceType.DB which is also used in case there is "
"no <classname>@Source annotation at all."
msgstr ""
#. Tag: para
#: basic_mapping.xml:1609
#, no-c-format
msgid ""
"Like in the case of version numbers, the timestamp can also be generated by "
"the database instead of Hibernate. To do that, use <code>@org.hibernate."
"annotations.Generated(GenerationTime.ALWAYS).</code>"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1613
#, fuzzy, no-c-format
msgid "In hbm.xml, use the <literal><timestamp> element:"
msgstr "例如,如果我们有如下的 <literal><properties> æ˜ å°„ï¼š"
#. Tag: programlisting
#: basic_mapping.xml:1631
#, fuzzy, no-c-format
msgid ""
"<timestamp\n"
" column=\"timestamp_column\"\n"
" name=\"propertyName\"\n"
" access=\"field|property|ClassName\"\n"
" unsaved-value=\"null|undefined\"\n"
" source=\"vm|db\"\n"
" generated=\"never|always\"\n"
" node=\"element-name|@attribute-name|element/@attribute|.\"\n"
"/>"
msgstr ""
"<![CDATA["
#. Tag: para
#: basic_mapping.xml:1635
#, no-c-format
msgid ""
"<literal>column (optional - defaults to the property name): the "
"name of a column holding the timestamp."
msgstr ""
"<literal>column(å¯é€‰ — 默认为属性å):å˜æœ‰æ—¶é—´æˆ³çš„å—段å。 "
#. Tag: para
#: basic_mapping.xml:1641
#, no-c-format
msgid ""
"<literal>name: the name of a JavaBeans style property of Java type "
"<literal>Date or Timestamp of the persistent "
"class."
msgstr ""
"<literal>name:在æŒä¹…化类ä¸çš„ JavaBeans é£Žæ ¼çš„å±žæ€§å,其 Java 类型"
"是 <literal>Date 或者 Timestamp 的。 "
#. Tag: para
#: basic_mapping.xml:1647 basic_mapping.xml:2174 basic_mapping.xml:2391
#: basic_mapping.xml:3262 basic_mapping.xml:3456 basic_mapping.xml:3629
#, no-c-format
msgid ""
"<literal>access (optional - defaults to property(å¯é€‰ — 默认为 property ):"
"Hibernate 用æ¥è®¿é—®å±žæ€§å€¼çš„ç–略。 "
#. Tag: para
#: basic_mapping.xml:1653
#, no-c-format
msgid ""
"<literal>unsaved-value (optional - defaults to null "
"specifies that the identifier property value should be used."
msgstr ""
"<literal>unsaved-value (å¯é€‰ — 默认是 null ):用"
"äºŽæ ‡æ˜ŽæŸä¸ªå®žä¾‹æ—¶åˆšåˆšè¢«å®žä¾‹åŒ–的(尚未ä¿å˜ï¼‰ç‰ˆæœ¬å±žæ€§å€¼ï¼Œä¾é 这个值就å¯ä»¥æŠŠè¿™ç§"
"情况和已ç»åœ¨å…ˆå‰çš„ session ä¸ä¿å˜æˆ–装载的脱管(detached)实例区分开æ¥ã€‚"
"(<literal>undefined æŒ‡æ˜Žä½¿ç”¨æ ‡è¯†å±žæ€§å€¼è¿›è¡Œè¿™ç§åˆ¤æ–。) "
#. Tag: para
#: basic_mapping.xml:1663
#, no-c-format
msgid ""
"<literal>source (optional - defaults to vm ): "
"Where should Hibernate retrieve the timestamp value from? From the database, "
"or from the current JVM? Database-based timestamps incur an overhead because "
"Hibernate must hit the database in order to determine the \"next value\". It "
"is safer to use in clustered environments. Not all <literal>Dialects(å¯é€‰ — 默认是 vm ):Hibernate "
"如何æ‰èƒ½èŽ·å–到时间戳的值呢?从数æ®åº“ï¼Œè¿˜æ˜¯å½“å‰ JVM?从数æ®åº“获å–会带æ¥ä¸€äº›è´Ÿ"
"æ‹…ï¼Œå› ä¸º Hibernate 必须访问数æ®åº“æ¥èŽ·å¾—“下一个值â€ï¼Œä½†æ˜¯åœ¨é›†ç¾¤çŽ¯å¢ƒä¸ä¼šæ›´å®‰å…¨"
"些。还è¦æ³¨æ„,并ä¸æ˜¯æ‰€æœ‰çš„ <literal>Dialect(方言)都支æŒèŽ·å¾—æ•°æ®åº“"
"的当å‰æ—¶é—´æˆ³çš„,而支æŒçš„æ•°æ®åº“ä¸åˆæœ‰ä¸€éƒ¨åˆ†å› 为精度ä¸è¶³ï¼Œç”¨äºŽé”定是ä¸å®‰å…¨çš„"
"(例如 Oracle 8)。 "
#. Tag: para
#: basic_mapping.xml:1676
#, no-c-format
msgid ""
"<literal>generated (optional - defaults to never for more information."
msgstr ""
"<literal>generated (å¯é€‰ - 默认是 never ):指出"
"时间戳值是å¦å®žé™…上是由数æ®åº“生æˆçš„。请å‚阅 <link linkend=\"mapping-generated"
"\">generated properties</link> 的讨论。 "
#. Tag: title
#: basic_mapping.xml:1686
#, no-c-format
msgid "Note"
msgstr "注æ„"
#. Tag: para
#: basic_mapping.xml:1688
#, no-c-format
msgid ""
"<literal><Timestamp> is equivalent to <version "
"type=\"timestamp\"></literal>. And <timestamp source=\"db"
"\"></literal> is equivalent to <version type=\"dbtimestamp"
"\"></literal>"
msgstr ""
"注æ„,<literal><timestamp> å’Œ <version type="
"\"timestamp\"></literal> 是ç‰ä»·çš„。并且 <timestamp source=\"db"
"\"></literal> 和 <version type=\"dbtimestamp\"> "
"是ç‰ä»·çš„。 "
#. Tag: title
#: basic_mapping.xml:1697
#, no-c-format
msgid "Property"
msgstr "Property"
#. Tag: para
#: basic_mapping.xml:1699
#, no-c-format
msgid ""
"You need to decide which property needs to be made persistent in a given "
"entity. This differs slightly between the annotation driven metadata and the "
"hbm.xml files."
msgstr ""
#. Tag: title
#: basic_mapping.xml:1704
#, no-c-format
msgid "Property mapping with annotations"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1706
#, no-c-format
msgid ""
"In the annotations world, every non static non transient property (field or "
"method depending on the access type) of an entity is considered persistent, "
"unless you annotate it as <literal>@Transient . Not having an "
"annotation for your property is equivalent to the appropriate "
"<literal>@Basic annotation."
msgstr ""
#. Tag: para
#: basic_mapping.xml:1713
#, no-c-format
msgid ""
"The <literal>@Basic annotation allows you to declare the fetching "
"strategy for a property. If set to <literal>LAZY , specifies that "
"this property should be fetched lazily when the instance variable is first "
"accessed. It requires build-time bytecode instrumentation, if your classes "
"are not instrumented, property level lazy loading is silently ignored. The "
"default is <literal>EAGER. You can also mark a property as not "
"optional thanks to the <classname>@Basic.optional attribute. "
"This will ensure that the underlying column are not nullable (if possible). "
"Note that a better approach is to use the <classname>@NotNull "
"annotation of the Bean Validation specification."
msgstr ""
#. Tag: para
#: basic_mapping.xml:1726
#, no-c-format
msgid "Let's look at a few examples:"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:1728
#, no-c-format
msgid ""
"public transient int counter; //transient property\n"
"\n"
"private String firstname; //persistent property\n"
"\n"
"@Transient\n"
"String getLengthInMeter() { ... } //transient property\n"
"\n"
"String getName() {... } // persistent property\n"
"\n"
"@Basic\n"
"int getLength() { ... } // persistent property\n"
"\n"
"@Basic(fetch = FetchType.LAZY)\n"
"String getDetailedComment() { ... } // persistent property\n"
"\n"
"@Temporal(TemporalType.TIME)\n"
"java.util.Date getDepartureTime() { ... } // persistent property \n"
"\n"
"@Enumerated(EnumType.STRING)\n"
"Starred getNote() { ... } //enum persisted as String in database"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1730
#, no-c-format
msgid ""
"<literal>counter, a transient field, and lengthInMeter@Transient , and will be "
"ignored by the Hibernate. <literal>name, lengthfirstname properties are mapped persistent "
"and eagerly fetched (the default for simple properties). The "
"<literal>detailedComment property value will be lazily fetched "
"from the database once a lazy property of the entity is accessed for the "
"first time. Usually you don't need to lazy simple properties (not to be "
"confused with lazy association fetching). The recommended alternative is to "
"use the projection capability of JP-QL (Java Persistence Query Language) or "
"Criteria queries."
msgstr ""
#. Tag: para
#: basic_mapping.xml:1743
#, no-c-format
msgid ""
"JPA support property mapping of all basic types supported by Hibernate (all "
"basic Java types , their respective wrappers and serializable classes). "
"Hibernate Annotations supports out of the box enum type mapping either into "
"a ordinal column (saving the enum ordinal) or a string based column (saving "
"the enum string representation): the persistence representation, defaulted "
"to ordinal, can be overridden through the <literal>@Enumerated "
"annotation as shown in the <literal>note property example."
msgstr ""
#. Tag: para
#: basic_mapping.xml:1753
#, no-c-format
msgid ""
"In plain Java APIs, the temporal precision of time is not defined. When "
"dealing with temporal data you might want to describe the expected precision "
"in database. Temporal data can have <literal>DATE, TIMETIMESTAMP precision (ie the actual date, "
"only the time, or both). Use the <literal>@Temporal annotation to "
"fine tune that."
msgstr ""
#. Tag: para
#: basic_mapping.xml:1761
#, no-c-format
msgid ""
"<literal>@Lob indicates that the property should be persisted in a "
"Blob or a Clob depending on the property type: <classname>java.sql.ClobCharacter[], char[]String will be persisted in "
"a Clob. <classname>java.sql.Blob, Byte[] , "
"<classname>byte[] and Serializable type "
"will be persisted in a Blob."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:1770
#, no-c-format
msgid ""
"@Lob\n"
"public String getFullText() {\n"
" return fullText;\n"
"}\n"
"\n"
"@Lob\n"
"public byte[] getFullCode() {\n"
" return fullCode;\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1772
#, no-c-format
msgid ""
"If the property type implements <classname>java.io.Serializable "
"and is not a basic type, and if the property is not annotated with "
"<literal>@Lob, then the Hibernate serializable "
"type is used."
msgstr ""
#. Tag: title
#: basic_mapping.xml:1779
#, no-c-format
msgid "Type"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1781
#, no-c-format
msgid ""
"You can also manually specify a type using the <literal>@org.hibernate."
"annotations.Type</literal> and some parameters if needed. @Type."
"type</classname> could be:"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1788 basic_mapping.xml:2220
#, no-c-format
msgid ""
"The name of a Hibernate basic type: <literal>integer, string, character, "
"date, timestamp, float, binary, serializable, object, blob</literal> etc."
msgstr ""
"Hibernate 基本类型å(比如:<literal>integer, string, character,date, "
"timestamp, float, binary, serializable, object, blob</literal>)。 "
#. Tag: para
#: basic_mapping.xml:1794 basic_mapping.xml:2226
#, no-c-format
msgid ""
"The name of a Java class with a default basic type: <literal>int, float, "
"char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob</"
"literal> etc."
msgstr ""
"一个 Java 类的åå—,这个类属于一ç§é»˜è®¤åŸºç¡€ç±»åž‹ï¼ˆæ¯”如:<literal>int, float,"
"char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob</"
"literal>)。 "
#. Tag: para
#: basic_mapping.xml:1800 basic_mapping.xml:2232
#, no-c-format
msgid "The name of a serializable Java class."
msgstr "一个å¯ä»¥åºåˆ—化的 Java 类的åå—。"
#. Tag: para
#: basic_mapping.xml:1804 basic_mapping.xml:2236
#, no-c-format
msgid ""
"The class name of a custom type: <literal>com.illflow.type.MyCustomTypeHibernate.DATE 和"
"<literal>Hibernate.TIMESTAMP,或者为了指定一个自定义类型。) "
#. Tag: para
#: basic_mapping.xml:1814
#, no-c-format
msgid ""
"<literal>@org.hibernate.annotations.TypeDef and @org."
"hibernate.annotations.TypeDefs</literal> allows you to declare type "
"definitions. These annotations can be placed at the class or package level. "
"Note that these definitions are global for the session factory (even when "
"defined at the class level). If the type is used on a single entity, you can "
"place the definition on the entity itself. Otherwise, it is recommended to "
"place the definition at the package level. In the example below, when "
"Hibernate encounters a property of class <literal>PhoneNumer , it "
"delegates the persistence strategy to the custom mapping type "
"<literal>PhoneNumberType. However, properties belonging to other "
"classes, too, can delegate their persistence strategy to "
"<literal>PhoneNumberType, by explicitly using the @Type "
"attribute to customize the TypeDef."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:1841
#, no-c-format
msgid ""
"//in org/hibernate/test/annotations/entity/package-info.java\n"
"@TypeDefs(\n"
" {\n"
" @TypeDef(\n"
" name=\"caster\",\n"
" typeClass = CasterStringType.class,\n"
" parameters = {\n"
" @Parameter(name=\"cast\", value=\"lower\")\n"
" }\n"
" )\n"
" }\n"
")\n"
"package org.hibernate.test.annotations.entity;\n"
"\n"
"//in org/hibernate/test/annotations/entity/Forest.java\n"
"public class Forest {\n"
" @Type(type=\"caster\")\n"
" public String getSmallText() {\n"
" ...\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1843
#, no-c-format
msgid ""
"When using composite user type, you will have to express column definitions. "
"The <literal>@Columns has been introduced for that purpose."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:1847
#, no-c-format
msgid ""
"@Type(type=\"org.hibernate.test.annotations.entity.MonetaryAmountUserType"
"\")\n"
"@Columns(columns = {\n"
" @Column(name=\"r_amount\"),\n"
" @Column(name=\"r_currency\")\n"
"})\n"
"public MonetaryAmount getAmount() {\n"
" return amount;\n"
"}\n"
"\n"
"\n"
"public class MonetaryAmount implements Serializable {\n"
" private BigDecimal amount;\n"
" private Currency currency;\n"
" ...\n"
"}"
msgstr ""
#. Tag: title
#: basic_mapping.xml:1851
#, no-c-format
msgid "Access type"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1853
#, no-c-format
msgid ""
"By default the access type of a class hierarchy is defined by the position "
"of the <classname>@Id or @EmbeddedId "
"annotations. If these annotations are on a field, then only fields are "
"considered for persistence and the state is accessed via the field. If there "
"annotations are on a getter, then only the getters are considered for "
"persistence and the state is accessed via the getter/setter. That works well "
"in practice and is the recommended approach."
msgstr ""
#. Tag: para
#: basic_mapping.xml:1861
#, no-c-format
msgid ""
"The placement of annotations within a class hierarchy has to be consistent "
"(either field or on property) to be able to determine the default access "
"type. It is recommended to stick to one single annotation placement strategy "
"throughout your whole application."
msgstr ""
#. Tag: para
#: basic_mapping.xml:1868
#, no-c-format
msgid "However in some situations, you need to:"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1872
#, no-c-format
msgid "force the access type of the entity hierarchy"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1876
#, no-c-format
msgid "override the access type of a specific entity in the class hierarchy"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1881
#, no-c-format
msgid "override the access type of an embeddable type"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1885
#, no-c-format
msgid ""
"The best use case is an embeddable class used by several entities that might "
"not use the same access type. In this case it is better to force the access "
"type at the embeddable class level."
msgstr ""
#. Tag: para
#: basic_mapping.xml:1890
#, no-c-format
msgid ""
"To force the access type on a given class, use the <classname>@Access "
"except for the <literal>orderNumber property. Note that the "
"corresponding field, if any must be marked as <classname>@Transienttransient."
msgstr ""
#. Tag: title
#: basic_mapping.xml:1907
#, no-c-format
msgid "@org.hibernate.annotations.AccessType"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1909
#, no-c-format
msgid ""
"The annotation <classname>@org.hibernate.annotations.AccessType "
"should be considered deprecated for FIELD and PROPERTY access. It is still "
"useful however if you need to use a custom access type."
msgstr ""
#. Tag: title
#: basic_mapping.xml:1918
#, no-c-format
msgid "Optimistic lock"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1920
#, no-c-format
msgid ""
"It is sometimes useful to avoid increasing the version number even if a "
"given property is dirty (particularly collections). You can do that by "
"annotating the property (or collection) with <literal>@OptimisticLock"
"(excluded=true)</literal>."
msgstr ""
#. Tag: para
#: basic_mapping.xml:1925
#, no-c-format
msgid ""
"More formally, specifies that updates to this property do not require "
"acquisition of the optimistic lock."
msgstr ""
#. Tag: title
#: basic_mapping.xml:1930
#, no-c-format
msgid "Declaring column attributes"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1932
#, no-c-format
msgid ""
"The column(s) used for a property mapping can be defined using the "
"<literal>@Column annotation. Use it to override default values "
"(see the JPA specification for more information on the defaults). You can "
"use this annotation at the property level for properties that are:"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1940
#, no-c-format
msgid "not annotated at all"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1944
#, fuzzy, no-c-format
msgid "annotated with <literal>@Basic"
msgstr "<literal>assigned"
#. Tag: para
#: basic_mapping.xml:1948
#, fuzzy, no-c-format
msgid "annotated with <literal>@Version"
msgstr "<literal>string"
#. Tag: para
#: basic_mapping.xml:1952
#, fuzzy, no-c-format
msgid "annotated with <literal>@Lob"
msgstr "<literal>hilo"
#. Tag: para
#: basic_mapping.xml:1956
#, fuzzy, no-c-format
msgid "annotated with <literal>@Temporal"
msgstr "<literal>serializable"
#. Tag: programlisting
#: basic_mapping.xml:1960
#, no-c-format
msgid ""
"@Entity\n"
"public class Flight implements Serializable {\n"
"...\n"
"@Column(updatable = false, name = \"flight_name\", nullable = false, "
"length=50)\n"
"public String getName() { ... }"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1962
#, no-c-format
msgid ""
"The <literal>name property is mapped to the flight_name or @Version properties."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:1994
#, no-c-format
msgid ""
"@Column(\n"
" name=\"columnName\";\n"
" boolean unique() default false;\n"
" boolean nullable() default true;\n"
" boolean insertable() default true;\n"
" boolean updatable() default true;\n"
" String columnDefinition() default \"\";\n"
" String table() default \"\";\n"
" int length() default 255;\n"
" int precision() default 0; // decimal precision\n"
" int scale() default 0; // decimal scale"
msgstr ""
#. Tag: para
#: basic_mapping.xml:1998
#, fuzzy, no-c-format
msgid ""
"<literal>name (optional): the column name (default to the property "
"name)"
msgstr "<literal>name(å¯é€‰ï¼‰ï¼šæ ‡è¯†å±žæ€§çš„åå—。 "
#. Tag: para
#: basic_mapping.xml:2003
#, fuzzy, no-c-format
msgid ""
"<literal>unique (optional): set a unique constraint on this column "
"or not (default false)"
msgstr ""
"<literal>unique(å¯é€‰ï¼‰ï¼šä½¿ç”¨ DDL 为该å—æ®µæ·»åŠ å”¯ä¸€çš„çº¦æŸã€‚åŒæ ·ï¼Œå…"
"许它作为 <literal>property-ref å¼•ç”¨çš„ç›®æ ‡ã€‚ "
#. Tag: para
#: basic_mapping.xml:2008
#, fuzzy, no-c-format
msgid ""
"<literal>nullable (optional): set the column as nullable (default "
"true)."
msgstr "<literal>name(å¯é€‰ï¼‰ï¼šæ ‡è¯†å±žæ€§çš„åå—。 "
#. Tag: para
#: basic_mapping.xml:2013
#, fuzzy, no-c-format
msgid ""
"<literal>insertable (optional): whether or not the column will be "
"part of the insert statement (default true)"
msgstr "<literal>name(å¯é€‰ï¼‰ï¼šæ ‡è¯†å±žæ€§çš„åå—。 "
#. Tag: para
#: basic_mapping.xml:2019
#, fuzzy, no-c-format
msgid ""
"<literal>updatable (optional): whether or not the column will be "
"part of the update statement (default true)"
msgstr "<literal>catalog(å¯é€‰ï¼‰ï¼šæ•°æ®åº“ catalog çš„å称。 "
#. Tag: para
#: basic_mapping.xml:2025
#, no-c-format
msgid ""
"<literal>columnDefinition (optional): override the sql DDL "
"fragment for this particular column (non portable)"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2031
#, fuzzy, no-c-format
msgid ""
"<literal>table (optional): define the targeted table (default "
"primary table)"
msgstr "<literal>catalog(å¯é€‰ï¼‰ï¼šæ•°æ®åº“ catalog çš„å称。 "
#. Tag: para
#: basic_mapping.xml:2036
#, no-c-format
msgid ""
"<literal>length (optional): column length "
"(default 255)"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2041
#, no-c-format
msgid ""
"<literal>precision (optional): column decimal "
"precision (default 0)"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2046
#, no-c-format
msgid ""
"<literal>scale (optional): column decimal scale "
"if useful (default 0)"
msgstr ""
#. Tag: title
#: basic_mapping.xml:2054
#, no-c-format
msgid "Formula"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2056
#, no-c-format
msgid ""
"Sometimes, you want the Database to do some computation for you rather than "
"in the JVM, you might also create some kind of virtual column. You can use a "
"SQL fragment (aka formula) instead of mapping a property into a column. This "
"kind of property is read only (its value is calculated by your formula "
"fragment)."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:2062
#, no-c-format
msgid ""
"@Formula(\"obj_length * obj_height * obj_width\")\n"
"public long getObjectVolume()"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2064
#, no-c-format
msgid ""
"The SQL fragment can be as complex as you want and even include subselects."
msgstr ""
#. Tag: title
#: basic_mapping.xml:2069
#, no-c-format
msgid "Non-annotated property defaults"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2071
#, no-c-format
msgid "If a property is not annotated, the following rules apply:"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2074
#, no-c-format
msgid "If the property is of a single type, it is mapped as @Basic"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2079
#, no-c-format
msgid ""
"Otherwise, if the type of the property is annotated as @Embeddable, it is "
"mapped as @Embedded"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2084
#, no-c-format
msgid ""
"Otherwise, if the type of the property is <classname>Serializable@Basic in a column "
"holding the object in its serialized version"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2091
#, no-c-format
msgid ""
"Otherwise, if the type of the property is <classname>java.sql.Clobjava.sql.Blob, it is mapped as "
"<classname>@Lob with the appropriate LobType element declares a persistent "
"JavaBean style property of the class."
msgstr ""
"<literal><property> å…ƒç´ ä¸ºç±»å®šä¹‰äº†ä¸€ä¸ªæŒä¹…化的ã€JavaBean é£Žæ ¼"
"的属性。 "
#. Tag: programlisting
#: basic_mapping.xml:2136
#, fuzzy, no-c-format
msgid ""
"<property\n"
" name=\"propertyName\"\n"
" column=\"column_name\"\n"
" type=\"typename\"\n"
" update=\"true|false\"\n"
" insert=\"true|false\"\n"
" formula=\"arbitrary SQL expression\"\n"
" access=\"field|property|ClassName\"\n"
" lazy=\"true|false\"\n"
" unique=\"true|false\"\n"
" not-null=\"true|false\"\n"
" optimistic-lock=\"true|false\"\n"
" generated=\"never|insert|always\"\n"
" node=\"element-name|@attribute-name|element/@attribute|.\"\n"
" index=\"index_name\"\n"
" unique_key=\"unique_key_id\"\n"
" length=\"L\"\n"
" precision=\"P\"\n"
" scale=\"S\"\n"
"/>"
msgstr ""
"<![CDATA["
#. Tag: para
#: basic_mapping.xml:2140
#, no-c-format
msgid ""
"<literal>name: the name of the property, with an initial lowercase "
"letter."
msgstr "<literal>name:属性的åå—,以å°å†™å—æ¯å¼€å¤´ã€‚"
#. Tag: para
#: basic_mapping.xml:2145
#, no-c-format
msgid ""
"<literal>column (optional - defaults to the property name): the "
"name of the mapped database table column. This can also be specified by "
"nested <literal><column> element(s)."
msgstr ""
"<literal>column(å¯é€‰ — 默认为属性åå—):对应的数æ®åº“å—段å。 也å¯"
"以通过嵌套的 <literal><column> å…ƒç´ æŒ‡å®šã€‚ "
#. Tag: para
#: basic_mapping.xml:2157
#, no-c-format
msgid ""
"<literal>update, insert (optional - defaults to true and/or INSERT statements. "
"Setting both to <literal>false allows a pure \"derived\" property "
"whose value is initialized from some other property that maps to the same "
"column(s), or by a trigger or other application."
msgstr ""
"<literal>update, insert(å¯é€‰ — 默认为 true ): "
"表明用于 <literal>UPDATE å’Œ/或 INSERT çš„ SQL è¯"
"å¥ä¸æ˜¯å¦åŒ…å«è¿™ä¸ªè¢«æ˜ 射了的å—段。这二者如果都设置为 <literal>false "
"则表明这是一个“外æºæ€§ï¼ˆderived)â€çš„属性,它的值æ¥æºäºŽæ˜ 射到åŒä¸€ä¸ªï¼ˆæˆ–多个) "
"å—段的æŸäº›å…¶ä»–属性,或者通过一个 trigger(触å‘器)或其他程åºç”Ÿæˆã€‚ "
#. Tag: para
#: basic_mapping.xml:2167
#, no-c-format
msgid ""
"<literal>formula (optional): an SQL expression that defines the "
"value for a <emphasis>computed property. Computed properties do "
"not have a column mapping of their own."
msgstr ""
"<literal>formula(å¯é€‰ï¼‰ï¼šä¸€ä¸ª SQL 表达å¼ï¼Œå®šä¹‰äº†è¿™ä¸ªè®¡"
"ç®— (computed)</emphasis> 属性的值。计算属性没有和它对应的数æ®åº“å—段。"
#. Tag: para
#: basic_mapping.xml:2180
#, no-c-format
msgid ""
"<literal>lazy (optional - defaults to false ): "
"specifies that this property should be fetched lazily when the instance "
"variable is first accessed. It requires build-time bytecode instrumentation."
msgstr ""
"<literal>lazy(å¯é€‰ — 默认为 false ):指定 指定"
"实例å˜é‡ç¬¬ä¸€æ¬¡è¢«è®¿é—®æ—¶ï¼Œè¿™ä¸ªå±žæ€§æ˜¯å¦å»¶è¿ŸæŠ“å–(fetched lazily)( 需è¦è¿è¡Œæ—¶å—"
"节ç 增强)。 "
#. Tag: para
#: basic_mapping.xml:2187
#, no-c-format
msgid ""
"<literal>unique (optional): enables the DDL generation of a unique "
"constraint for the columns. Also, allow this to be the target of a "
"<literal>property-ref."
msgstr ""
"<literal>unique(å¯é€‰ï¼‰ï¼šä½¿ç”¨ DDL 为该å—æ®µæ·»åŠ å”¯ä¸€çš„çº¦æŸã€‚åŒæ ·ï¼Œå…"
"许它作为 <literal>property-ref å¼•ç”¨çš„ç›®æ ‡ã€‚ "
#. Tag: para
#: basic_mapping.xml:2194
#, no-c-format
msgid ""
"<literal>not-null (optional): enables the DDL generation of a "
"nullability constraint for the columns."
msgstr ""
"<literal>not-null(å¯é€‰ï¼‰ï¼šä½¿ç”¨ DDL 为该å—æ®µæ·»åŠ å¯å¦ä¸ºç©º"
"(nullability)的约æŸã€‚ "
#. Tag: para
#: basic_mapping.xml:2199 basic_mapping.xml:3282
#, no-c-format
msgid ""
"<literal>optimistic-lock (optional - defaults to true(å¯é€‰ — 默认为 true ):"
"指定这个属性在åšæ›´æ–°æ—¶æ˜¯å¦éœ€è¦èŽ·å¾—ä¹è§‚é”定(optimistic lock)。æ¢å¥è¯è¯´ï¼Œå®ƒå†³"
"定这个属性å‘生è„æ•°æ®æ—¶ç‰ˆæœ¬ï¼ˆversion)的值是å¦å¢žé•¿ã€‚ "
#. Tag: para
#: basic_mapping.xml:2207
#, no-c-format
msgid ""
"<literal>generated (optional - defaults to never for more information."
msgstr ""
"<literal>generated (å¯é€‰ — 默认为 never ):表明"
"æ¤å±žæ€§å€¼æ˜¯å¦å®žé™…上是由数æ®åº“生æˆçš„。请å‚阅 <link linkend=\"mapping-generated"
"\">generated properties</link> 的讨论。 "
#. Tag: para
#: basic_mapping.xml:2216
#, no-c-format
msgid "<emphasis>typename could be:"
msgstr "<emphasis>typename å¯ä»¥æ˜¯å¦‚ä¸‹å‡ ç§ï¼š"
#. Tag: para
#: basic_mapping.xml:2241
#, no-c-format
msgid ""
"If you do not specify a type, Hibernate will use reflection upon the named "
"property and guess the correct Hibernate type. Hibernate will attempt to "
"interpret the name of the return class of the property getter using, in "
"order, rules 2, 3, and 4. In certain cases you will need the <literal>typeHibernate."
"DATE</literal> and Hibernate.TIMESTAMP , or to specify a "
"custom type."
msgstr ""
"å¦‚æžœä½ æ²¡æœ‰æŒ‡å®šç±»åž‹ï¼ŒHibernarte 会使用åå°„æ¥å¾—到这个åå—的属性,以æ¤æ¥çŒœæµ‹æ£ç¡®"
"çš„ Hibernate 类型。Hibernate 会按照规则 2,3,4 的顺åºå¯¹å±žæ€§è¯»å–器(getteræ–¹"
"法)的返回类进行解释。然而,这还ä¸å¤Ÿã€‚ 在æŸäº›æƒ…å†µä¸‹ä½ ä»ç„¶éœ€è¦ <literal>typeHibernate.DATE å’Œ"
"<literal>Hibernate.TIMESTAMP,或者为了指定一个自定义类型。) "
#. Tag: para
#: basic_mapping.xml:2250
#, no-c-format
msgid ""
"The <literal>access attribute allows you to control how Hibernate "
"accesses the property at runtime. By default, Hibernate will call the "
"property get/set pair. If you specify <literal>access=\"field\", "
"Hibernate will bypass the get/set pair and access the field directly using "
"reflection. You can specify your own strategy for property access by naming "
"a class that implements the interface <literal>org.hibernate.property."
"PropertyAccessor</literal>."
msgstr ""
"<literal>access 属性用æ¥è®©ä½ 控制 Hibernate 如何在è¿è¡Œæ—¶è®¿é—®å±žæ€§ã€‚在"
"默认情况下,Hibernate 会使用属性的 get/set 方法对(pairï¼‰ã€‚å¦‚æžœä½ æŒ‡æ˜Ž "
"<literal>access=\"field\",Hibernate 会忽略 get/set 方法对,直接使"
"用åå°„æ¥è®¿é—®æˆå‘˜å˜é‡ã€‚ä½ ä¹Ÿå¯ä»¥æŒ‡å®šä½ 自己的ç–略,这就需è¦ä½ 自己实现 "
"<literal>org.hibernate.property.PropertyAccessor 接å£ï¼Œå†åœ¨ access "
"ä¸è®¾ç½®ä½ 自定义ç–略类的åå—。 "
#. Tag: para
#: basic_mapping.xml:2259
#, no-c-format
msgid ""
"A powerful feature is derived properties. These properties are by definition "
"read-only. The property value is computed at load time. You declare the "
"computation as an SQL expression. This then translates to a <literal>SELECT å查询è¯å¥ã€‚ "
#. Tag: programlisting
#: basic_mapping.xml:2265
#, fuzzy, no-c-format
msgid ""
"<property name=\"totalPrice\"\n"
" formula=\"( SELECT SUM (li.quantity*p.price) FROM LineItem li, Product "
"p\n"
" WHERE li.productId = p.productId\n"
" AND li.customerId = customerId\n"
" AND li.orderNumber = orderNumber )\"/>"
msgstr ""
"<property name=\"totalPrice\"\n"
" formula=\"( SELECT SUM (li.quantity*p.price) FROM LineItem li, Product "
"p\n"
" WHERE li.productId = p.productId\n"
" AND li.customerId = customerId\n"
" AND li.orderNumber = orderNumber )\"/>"
#. Tag: para
#: basic_mapping.xml:2267
#, no-c-format
msgid ""
"You can reference the entity table by not declaring an alias on a particular "
"column. This would be <literal>customerId in the given example. "
"You can also use the nested <literal><formula> mapping "
"element if you do not want to use the attribute."
msgstr ""
"注æ„ï¼Œä½ å¯ä»¥ä½¿ç”¨å®žä½“自己的表,而ä¸ç”¨ä¸ºè¿™ä¸ªç‰¹åˆ«çš„列定义别å(上é¢ä¾‹åä¸çš„ "
"<literal>customerId)。åŒæ—¶æ³¨æ„ï¼Œå¦‚æžœä½ ä¸å–œæ¬¢ä½¿ç”¨å±žæ€§ï¼Œ ä½ å¯ä»¥ä½¿ç”¨"
"嵌套的 <literal><formula> æ˜ å°„å…ƒç´ ã€‚ "
#. Tag: title
#: basic_mapping.xml:2276
#, no-c-format
msgid "Embedded objects (aka components)"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2278
#, fuzzy, no-c-format
msgid ""
"Embeddable objects (or components) are objects whose properties are mapped "
"to the same table as the owning entity's table. Components can, in turn, "
"declare their own properties, components or collections"
msgstr ""
"<literal><component> å…ƒç´ æŠŠåå¯¹è±¡çš„ä¸€äº›å…ƒç´ ä¸Žçˆ¶ç±»å¯¹åº”çš„è¡¨çš„ä¸€"
"些å—æ®µæ˜ å°„èµ·æ¥ã€‚然åŽç»„件å¯ä»¥å®šä¹‰å®ƒä»¬è‡ªå·±çš„属性ã€ç»„件或者集åˆã€‚å‚è§åŽé¢"
"的“Componentsâ€ä¸€ç« 。 "
#. Tag: para
#: basic_mapping.xml:2283
#, no-c-format
msgid ""
"It is possible to declare an embedded component inside an entity and even "
"override its column mapping. Component classes have to be annotated at the "
"class level with the <literal>@Embeddable annotation. It is "
"possible to override the column mapping of an embedded object for a "
"particular entity using the <literal>@Embedded and "
"<literal>@AttributeOverride annotation in the associated property:"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:2291
#, no-c-format
msgid ""
"@Entity\n"
"public class Person implements Serializable {\n"
"\n"
" // Persistent component using defaults\n"
" Address homeAddress;\n"
"\n"
" @Embedded\n"
" @AttributeOverrides( {\n"
" @AttributeOverride(name=\"iso2\", column = @Column(name="
"\"bornIso2\") ),\n"
" @AttributeOverride(name=\"name\", column = @Column(name="
"\"bornCountryName\") )\n"
" } )\n"
" Country bornIn;\n"
" ...\n"
"}"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:2293
#, no-c-format
msgid ""
"@Embeddable\n"
"public class Address implements Serializable {\n"
" String city;\n"
" Country nationality; //no overriding here\n"
"}"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:2295
#, no-c-format
msgid ""
"@Embeddable\n"
"public class Country implements Serializable {\n"
" private String iso2;\n"
" @Column(name=\"countryName\") private String name;\n"
"\n"
" public String getIso2() { return iso2; }\n"
" public void setIso2(String iso2) { this.iso2 = iso2; }\n"
"\n"
" \n"
" public String getName() { return name; }\n"
" public void setName(String name) { this.name = name; }\n"
" ...\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2297
#, no-c-format
msgid ""
"An embeddable object inherits the access type of its owning entity (note "
"that you can override that using the <literal>@Access annotation)."
msgstr ""
#. Tag: para
#: basic_mapping.xml:2301
#, no-c-format
msgid ""
"The <literal>Person entity has two component properties, "
"<literal>homeAddress and bornIn . "
"<literal>homeAddress property has not been annotated, but "
"Hibernate will guess that it is a persistent component by looking for the "
"<literal>@Embeddable annotation in the Address class. We also "
"override the mapping of a column name (to <literal>bornCountryName@Embedded and "
"<literal>@AttributeOverride annotations for each mapped attribute "
"of <literal>Country. As you can see, Country is "
"also a nested component of <literal>Address, again using auto-"
"detection by Hibernate and JPA defaults. Overriding columns of embedded "
"objects of embedded objects is through dotted expressions."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:2316
#, no-c-format
msgid ""
"@Embedded\n"
" @AttributeOverrides( {\n"
" @AttributeOverride(name=\"city\", column = @Column(name="
"\"fld_city\") ),\n"
" @AttributeOverride(name=\"nationality.iso2\", column = @Column"
"(name=\"nat_Iso2\") ),\n"
" @AttributeOverride(name=\"nationality.name\", column = @Column"
"(name=\"nat_CountryName\") )\n"
" //nationality columns in homeAddress are overridden\n"
" } )\n"
" Address homeAddress;"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2318
#, no-c-format
msgid ""
"Hibernate Annotations supports something that is not explicitly supported by "
"the JPA specification. You can annotate a embedded object with the "
"<literal>@MappedSuperclass annotation to make the superclass "
"properties persistent (see <literal>@MappedSuperclass for more "
"informations)."
msgstr ""
#. Tag: para
#: basic_mapping.xml:2324
#, no-c-format
msgid ""
"You can also use association annotations in an embeddable object (ie "
"<literal>@OneToOne, @ManyToOne , "
"<classname>@OneToMany or @ManyToMany ). To "
"override the association columns you can use <literal>@AssociationOverride "
"interface. You can write a strategy that prevent name clashing in such a "
"situation. <classname>DefaultComponentSafeNamingStrategy is an "
"example of this."
msgstr ""
#. Tag: para
#: basic_mapping.xml:2340
#, no-c-format
msgid ""
"If a property of the embedded object points back to the owning entity, "
"annotate it with the <classname>@Parent annotation. Hibernate "
"will make sure this property is properly loaded with the entity reference."
msgstr ""
#. Tag: para
#: basic_mapping.xml:2345
#, no-c-format
msgid "In XML, use the <literal><component> element."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:2367
#, fuzzy, no-c-format
msgid ""
"<component\n"
" name=\"propertyName\"\n"
" class=\"className\"\n"
" insert=\"true|false\"\n"
" update=\"true|false\"\n"
" access=\"field|property|ClassName\"\n"
" lazy=\"true|false\"\n"
" optimistic-lock=\"true|false\"\n"
" unique=\"true|false\"\n"
" node=\"element-name|.\"\n"
">\n"
"\n"
" <property ...../>\n"
" <many-to-one .... />\n"
" ........\n"
"</component>"
msgstr ""
"<component \n"
" name=\"propertyName\" \n"
" class=\"className\"\n"
" insert=\"true|false\"\n"
" update=\"true|false\"\n"
" access=\"field|property|ClassName\"\n"
" lazy=\"true|false\"\n"
" optimistic-lock=\"true|false\"\n"
" unique=\"true|false\"\n"
" node=\"element-name|.\"\n"
">\n"
" \n"
" <property ...../>\n"
" <many-to-one .... />\n"
" ........\n"
"</component>"
#. Tag: para
#: basic_mapping.xml:2371 basic_mapping.xml:3217 basic_mapping.xml:3417
#, no-c-format
msgid "<literal>name: the name of the property."
msgstr "<literal>name:属性å。"
#. Tag: para
#: basic_mapping.xml:2375
#, no-c-format
msgid ""
"<literal>class (optional - defaults to the property type "
"determined by reflection): the name of the component (child) class."
msgstr ""
"<literal>class(å¯é€‰ — 默认为通过å射得到的属性类型):组件(å)类"
"çš„åå—。 "
#. Tag: para
#: basic_mapping.xml:2381 basic_mapping.xml:3677
#, no-c-format
msgid ""
"<literal>insert: do the mapped columns appear in SQL "
"<literal>INSERTs?"
msgstr ""
"<literal>insertï¼šè¢«æ˜ å°„çš„å—段是å¦å‡ºçŽ°åœ¨ SQL çš„ INSERT: do the mapped columns appear in SQL "
"<literal>UPDATEs ?"
msgstr ""
"<literal>updateï¼šè¢«æ˜ å°„çš„å—段是å¦å‡ºçŽ°åœ¨ SQL çš„ UPDATE (optional - defaults to false ): "
"specifies that this component should be fetched lazily when the instance "
"variable is first accessed. It requires build-time bytecode instrumentation."
msgstr ""
"<literal>lazy (å¯é€‰ — 默认是 false ):表明æ¤ç»„件"
"应在实例å˜é‡ç¬¬ä¸€æ¬¡è¢«è®¿é—®çš„æ—¶å€™å»¶è¿ŸåŠ è½½ï¼ˆéœ€è¦ç¼–译时å—节ç 装置器)。"
#. Tag: para
#: basic_mapping.xml:2404
#, no-c-format
msgid ""
"<literal>optimistic-lock (optional - defaults to true(å¯é€‰ — 默认是 true ):"
"表明更新æ¤ç»„件是å¦éœ€è¦èŽ·å–ä¹è§‚é”。æ¢å¥è¯è¯´ï¼Œå½“这个属性å˜è„时,是å¦å¢žåŠ 版本å·"
"(Version)。"
#. Tag: para
#: basic_mapping.xml:2412 basic_mapping.xml:3695
#, no-c-format
msgid ""
"<literal>unique (optional - defaults to false ): "
"specifies that a unique constraint exists upon all mapped columns of the "
"component."
msgstr ""
"<literal>unique(å¯é€‰ — 默认是 false ):表明组件"
"æ˜ å°„çš„æ‰€æœ‰å—段上都有唯一性约æŸã€‚"
#. Tag: para
#: basic_mapping.xml:2419
#, no-c-format
msgid ""
"The child <literal><property> tags map properties of the "
"child class to table columns."
msgstr ""
"å…¶ <literal><property> åæ ‡ç¾ä¸ºå类的一些属性与表å—段之间建立"
"æ˜ å°„ã€‚"
#. Tag: para
#: basic_mapping.xml:2422
#, no-c-format
msgid ""
"The <literal><component> element allows a <"
"parent></literal> subelement that maps a property of the component class "
"as a reference back to the containing entity."
msgstr ""
"<literal><component> å…ƒç´ å…è®¸åŠ å…¥ä¸€ä¸ª <parent>"
"</literal> åå…ƒç´ ï¼Œåœ¨ç»„ä»¶ç±»å†…éƒ¨å°±å¯ä»¥æœ‰ä¸€ä¸ªæŒ‡å‘其容器的实体的åå‘引用。"
#. Tag: para
#: basic_mapping.xml:2426
#, fuzzy, no-c-format
msgid ""
"The <literal><dynamic-component> element allows a "
"<literal>Map to be mapped as a component, where the property names "
"refer to keys of the map. See <xref linkend=\"components-dynamic\"/> for "
"more information. This feature is not supported in annotations."
msgstr ""
"<literal><dynamic-component> å…ƒç´ å…许把一个 Map<id> 属性å¯ä»¥ä»Žæ ¹çˆ¶ç±»ç»§æ‰¿ä¸‹æ¥ã€‚在一棵继"
"æ‰¿æ ‘ä¸Šçš„æ¯ä¸ªå类都必须定义一个唯一的 <literal>discriminator-value。"
"如果没有指定,就会使用 Java 类的全é™å®šå。 "
#. Tag: programlisting
#: basic_mapping.xml:2473 basic_mapping.xml:2581
#, no-c-format
msgid ""
"@Entity\n"
"@Inheritance(strategy=InheritanceType.SINGLE_TABLE)\n"
"@DiscriminatorColumn(\n"
" name=\"planetype\",\n"
" discriminatorType=DiscriminatorType.STRING\n"
")\n"
"@DiscriminatorValue(\"Plane\")\n"
"public class Plane { ... }\n"
"\n"
"@Entity\n"
"@DiscriminatorValue(\"A320\")\n"
"public class A320 extends Plane { ... }"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2475
#, fuzzy, no-c-format
msgid ""
"In hbm.xml, for the table-per-class-hierarchy mapping strategy, the "
"<literal><subclass> declaration is used. For example:"
msgstr ""
"最åŽï¼Œå¤šæ€æŒä¹…化需è¦ä¸ºçˆ¶ç±»çš„æ¯ä¸ªå类都进行定义。对于“æ¯ä¸€æ£µç±»ç»§æ‰¿æ ‘对应一个"
"表â€çš„ç–ç•¥æ¥è¯´ï¼Œå°±éœ€è¦ä½¿ç”¨ <literal><subclass> 定义。 "
#. Tag: programlisting
#: basic_mapping.xml:2490
#, fuzzy, no-c-format
msgid ""
"<subclass\n"
" name=\"ClassName\"\n"
" discriminator-value=\"discriminator_value\"\n"
" proxy=\"ProxyInterface\"\n"
" lazy=\"true|false\"\n"
" dynamic-update=\"true|false\"\n"
" dynamic-insert=\"true|false\"\n"
" entity-name=\"EntityName\"\n"
" node=\"element-name\"\n"
" extends=\"SuperclassName\">\n"
"\n"
" <property .... />\n"
" .....\n"
"</subclass>"
msgstr ""
"<subclass\n"
" name=\"ClassName\"\n"
" discriminator-value=\"discriminator_value\"\n"
" proxy=\"ProxyInterface\"\n"
" lazy=\"true|false\"\n"
" dynamic-update=\"true|false\"\n"
" dynamic-insert=\"true|false\"\n"
" entity-name=\"EntityName\"\n"
" node=\"element-name\"\n"
" extends=\"SuperclassName\">\n"
"\n"
" <property .... />\n"
" .....\n"
"</subclass>"
#. Tag: para
#: basic_mapping.xml:2494 basic_mapping.xml:2692 basic_mapping.xml:2756
#, no-c-format
msgid ""
"<literal>name: the fully qualified class name of the subclass."
msgstr "<literal>name:å类的全é™å®šå。 "
#. Tag: para
#: basic_mapping.xml:2499
#, no-c-format
msgid ""
"<literal>discriminator-value (optional - defaults to the class "
"name): a value that distinguishes individual subclasses."
msgstr ""
"<literal>discriminator-valueï¼ˆè¾¨åˆ«æ ‡å¿—ï¼‰ï¼ˆå¯é€‰ — 默认为类å):一个"
"用于区分æ¯ä¸ªç‹¬ç«‹çš„å类的值。 "
#. Tag: para
#: basic_mapping.xml:2505
#, no-c-format
msgid ""
"<literal>proxy (optional): specifies a class or interface used for "
"lazy initializing proxies."
msgstr ""
"<literal>proxy(å¯é€‰ï¼‰ï¼šæŒ‡å®šä¸€ä¸ªç±»æˆ–者接å£ï¼Œåœ¨å»¶è¿Ÿè£…载时作为代ç†ä½¿"
"用。 "
#. Tag: para
#: basic_mapping.xml:2510
#, no-c-format
msgid ""
"<literal>lazy (optional - defaults to true ): "
"setting <literal>lazy=\"false\" disables the use of lazy fetching."
msgstr ""
"<literal>lazy(å¯é€‰ï¼Œé»˜è®¤æ˜¯ true ):设置为 "
"<literal>lazy=\"false\" ç¦æ¢ä½¿ç”¨å»¶è¿Ÿè£…载。 "
#. Tag: para
#: basic_mapping.xml:2518 basic_mapping.xml:2721 basic_mapping.xml:2782
#, fuzzy, no-c-format
msgid ""
"For information about inheritance mappings see <xref linkend=\"inheritance\"/"
">."
msgstr "æ›´å¤šå…³äºŽç»§æ‰¿æ˜ å°„çš„ä¿¡æ¯ï¼Œå‚考 <xref linkend=\"inheritance\"/>。 "
#. Tag: title
#: basic_mapping.xml:2522
#, no-c-format
msgid "Discriminator"
msgstr "鉴别器(discriminator) "
#. Tag: para
#: basic_mapping.xml:2524
#, fuzzy, no-c-format
msgid ""
"Discriminators are required for polymorphic persistence using the table-per-"
"class-hierarchy mapping strategy. It declares a discriminator column of the "
"table. The discriminator column contains marker values that tell the "
"persistence layer what subclass to instantiate for a particular row. "
"Hibernate Core supports the follwoing restricted set of types as "
"discriminator column: <literal>string, characterinteger , byte , "
"<literal>short, boolean , yes_notrue_false ."
msgstr ""
"在\"ä¸€æ£µå¯¹è±¡ç»§æ‰¿æ ‘å¯¹åº”ä¸€ä¸ªè¡¨\"çš„ç–ç•¥ä¸ï¼Œ<literal><discriminator>ã€character ã€"
"<literal>integerã€byte ã€shortboolean ã€yes_no ã€"
"<literal>true_false。"
#. Tag: para
#: basic_mapping.xml:2535
#, no-c-format
msgid ""
"Use the <classname>@DiscriminatorColumn to define the "
"discriminator column as well as the discriminator type. <note> "
"<para>The enum DiscriminatorType used in "
"<classname>javax.persitence.DiscriminatorColumn only contains "
"the values <constant>STRING, CHAR and "
"<constant>INTEGER which means that not all Hibernate supported "
"types are available via the <classname>@DiscriminatorColumn "
"annotation.</para> You can also use @DiscriminatorFormula@DiscriminatorFormula are to be set on "
"the root entity (once per persisted hierarchy)."
msgstr ""
#. Tag: para
#: basic_mapping.xml:2552
#, no-c-format
msgid ""
"<classname>@org.hibernate.annotations.DiscriminatorOptions "
"allows to optionally specify Hibernate specific discriminator options which "
"are not standardized in JPA. The available options are <literal>forceinsert. The force "
"attribute is useful if the table contains rows with \"extra\" discriminator "
"values that are not mapped to a persistent class. This could for example "
"occur when working with a legacy database. If <literal>force is "
"set to <constant>true Hibernate will specify the allowed "
"discriminator values in the <literal>SELECT query, even when "
"retrieving all instances of the root class. The second option - "
"<literal>insert - tells Hibernate whether or not to include the "
"discriminator column in SQL <literal>INSERTs. Usually the column "
"should be part of the <literal>INSERT statement, but if your "
"discriminator column is also part of a mapped composite identifier you have "
"to set this option to <constant>false."
msgstr ""
#. Tag: para
#: basic_mapping.xml:2569
#, no-c-format
msgid ""
"There is also a <classname>@org.hibernate.annotations.ForceDiscriminator instead."
msgstr ""
#. Tag: para
#: basic_mapping.xml:2575
#, no-c-format
msgid ""
"Finally, use <classname>@DiscriminatorValue on each class of the "
"hierarchy to specify the value stored in the discriminator column for a "
"given entity. If you do not set <classname>@DiscriminatorValue "
"on a class, the fully qualified class name is used."
msgstr ""
#. Tag: para
#: basic_mapping.xml:2583
#, no-c-format
msgid ""
"In hbm.xml, the <literal><discriminator> element is used to "
"define the discriminator column or formula:"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:2600
#, fuzzy, no-c-format
msgid ""
"<discriminator\n"
" column=\"discriminator_column\"\n"
" type=\"discriminator_type\"\n"
" force=\"true|false\"\n"
" insert=\"true|false\"\n"
" formula=\"arbitrary sql expression\"\n"
"/>"
msgstr ""
"<![CDATA["
#. Tag: para
#: basic_mapping.xml:2604
#, no-c-format
msgid ""
"<literal>column (optional - defaults to class ): "
"the name of the discriminator column."
msgstr ""
"<literal>column(å¯é€‰ — 默认为 class )"
"discriminator 器å—段的åå—。"
#. Tag: para
#: basic_mapping.xml:2610
#, no-c-format
msgid ""
"<literal>type (optional - defaults to string ): "
"a name that indicates the Hibernate type"
msgstr ""
"<literal>type(å¯é€‰ — 默认为 string )一个 "
"Hibernate å—段类型的åå— "
#. Tag: para
#: basic_mapping.xml:2616
#, no-c-format
msgid ""
"<literal>force (optional - defaults to false ): "
"\"forces\" Hibernate to specify the allowed discriminator values, even when "
"retrieving all instances of the root class."
msgstr ""
"<literal>force(强制)(å¯é€‰ — 默认为 false )\"强"
"制\" Hibernate 指定å…许的鉴别器值,å³ä½¿å½“å–å¾—çš„æ‰€æœ‰å®žä¾‹éƒ½æ˜¯æ ¹ç±»çš„ã€‚ "
#. Tag: para
#: basic_mapping.xml:2623
#, no-c-format
msgid ""
"<literal>insert (optional - defaults to true ): "
"set this to <literal>false if your discriminator column is also "
"part of a mapped composite identifier. It tells Hibernate not to include the "
"column in SQL <literal>INSERTs."
msgstr ""
"<literal>insert(å¯é€‰ - 默认为true ï¼‰å¦‚æžœä½ çš„é‰´åˆ«"
"器å—æ®µä¹Ÿæ˜¯æ˜ å°„ä¸ºå¤åˆæ ‡è¯†ï¼ˆcomposite identifier)的一部分,则需将这个值设为 "
"<literal>false。(告诉 Hibernate åœ¨åš SQL INSERT (optional): an arbitrary SQL expression that is "
"executed when a type has to be evaluated. It allows content-based "
"discrimination."
msgstr ""
"<literal>formula (å¯é€‰ï¼‰ä¸€ä¸ª SQL 表达å¼ï¼Œåœ¨ç±»åž‹åˆ¤æ–(判æ–是父类还是"
"具体åç±» — 译注)时执行。å¯ç”¨äºŽåŸºäºŽå†…容的鉴别器。 "
#. Tag: para
#: basic_mapping.xml:2638
#, no-c-format
msgid ""
"Actual values of the discriminator column are specified by the "
"<literal>discriminator-value attribute of the <"
"class></literal> and <subclass> elements."
msgstr ""
"鉴别器å—æ®µçš„å®žé™…å€¼æ˜¯æ ¹æ® <literal><class> å’Œ <"
"subclass></literal> å…ƒç´ ä¸çš„ discriminator-value 属性得"
"æ¥çš„。"
#. Tag: para
#: basic_mapping.xml:2643
#, no-c-format
msgid ""
"The <literal>formula attribute allows you to declare an arbitrary "
"SQL expression that will be used to evaluate the type of a row. For example:"
msgstr ""
"使用 <literal>formula å±žæ€§ä½ å¯ä»¥å®šä¹‰ä¸€ä¸ª SQL 表达å¼ï¼Œç”¨æ¥åˆ¤æ–一行数"
"æ®çš„类型。"
#. Tag: programlisting
#: basic_mapping.xml:2647
#, fuzzy, no-c-format
msgid ""
"<discriminator\n"
" formula=\"case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end\"\n"
" type=\"integer\"/>"
msgstr ""
"<![CDATA["
#. Tag: title
#: basic_mapping.xml:2652
#, fuzzy, no-c-format
msgid "Joined subclass strategy"
msgstr "连接的å类(joined-subclass) "
#. Tag: para
#: basic_mapping.xml:2654
#, fuzzy, no-c-format
msgid ""
"Each subclass can also be mapped to its own table. This is called the table-"
"per-subclass mapping strategy. An inherited state is retrieved by joining "
"with the table of the superclass. A discriminator column is not required for "
"this mapping strategy. Each subclass must, however, declare a table column "
"holding the object identifier. The primary key of this table is also a "
"foreign key to the superclass table and described by the "
"<classname>@PrimaryKeyJoinColumns or the <key> "
"å…ƒç´ ã€‚ "
#. Tag: programlisting
#: basic_mapping.xml:2664
#, no-c-format
msgid ""
"@Entity @Table(name=\"CATS\")\n"
"@Inheritance(strategy=InheritanceType.JOINED)\n"
"public class Cat implements Serializable { \n"
" @Id @GeneratedValue(generator=\"cat-uuid\") \n"
" @GenericGenerator(name=\"cat-uuid\", strategy=\"uuid\")\n"
" String getId() { return id; }\n"
"\n"
" ...\n"
"}\n"
"\n"
"@Entity @Table(name=\"DOMESTIC_CATS\")\n"
"@PrimaryKeyJoinColumn(name=\"CAT\")\n"
"public class DomesticCat extends Cat { \n"
" public String getName() { return name; }\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2667
#, no-c-format
msgid ""
"The table name still defaults to the non qualified class name. Also if "
"<classname>@PrimaryKeyJoinColumn is not set, the primary key / "
"foreign key columns are assumed to have the same names as the primary key "
"columns of the primary table of the superclass."
msgstr ""
#. Tag: para
#: basic_mapping.xml:2674
#, fuzzy, no-c-format
msgid ""
"In hbm.xml, use the <literal><joined-subclass> element. For "
"example:"
msgstr "ä½ å¯ä»¥ä½¿ç”¨ <literal>class å…ƒç´ æ¥å®šä¹‰ä¸€ä¸ªæŒä¹…化类。例如:"
#. Tag: programlisting
#: basic_mapping.xml:2688
#, fuzzy, no-c-format
msgid ""
"<joined-subclass\n"
" name=\"ClassName\"\n"
" table=\"tablename\"\n"
" proxy=\"ProxyInterface\"\n"
" lazy=\"true|false\"\n"
" dynamic-update=\"true|false\"\n"
" dynamic-insert=\"true|false\"\n"
" schema=\"schema\"\n"
" catalog=\"catalog\"\n"
" extends=\"SuperclassName\"\n"
" persister=\"ClassName\"\n"
" subselect=\"SQL expression\"\n"
" entity-name=\"EntityName\"\n"
" node=\"element-name\">\n"
"\n"
" <key .... >\n"
"\n"
" <property .... />\n"
" .....\n"
"</joined-subclass>"
msgstr ""
"<joined-subclass\n"
" name=\"ClassName\"\n"
" table=\"tablename\"\n"
" proxy=\"ProxyInterface\"\n"
" lazy=\"true|false\"\n"
" dynamic-update=\"true|false\"\n"
" dynamic-insert=\"true|false\"\n"
" schema=\"schema\"\n"
" catalog=\"catalog\"\n"
" extends=\"SuperclassName\"\n"
" persister=\"ClassName\"\n"
" subselect=\"SQL expression\"\n"
" entity-name=\"EntityName\"\n"
" node=\"element-name\">\n"
"\n"
" <key .... >\n"
"\n"
" <property .... />\n"
" .....\n"
"</joined-subclass>"
#. Tag: para
#: basic_mapping.xml:2697 basic_mapping.xml:2761
#, no-c-format
msgid "<literal>table: the name of the subclass table."
msgstr "<literal>table:å类的表å。"
#. Tag: para
#: basic_mapping.xml:2702 basic_mapping.xml:2766
#, no-c-format
msgid ""
"<literal>proxy (optional): specifies a class or interface to use "
"for lazy initializing proxies."
msgstr ""
"<literal>proxy(å¯é€‰ï¼‰ï¼šæŒ‡å®šä¸€ä¸ªç±»æˆ–者接å£ï¼Œåœ¨å»¶è¿Ÿè£…载时作为代ç†ä½¿"
"用。 "
#. Tag: para
#: basic_mapping.xml:2707 basic_mapping.xml:2771
#, no-c-format
msgid ""
"<literal>lazy (optional, defaults to true ): "
"setting <literal>lazy=\"false\" disables the use of lazy fetching."
msgstr ""
"<literal>lazy(å¯é€‰ï¼Œé»˜è®¤æ˜¯ true ):设置为 "
"<literal>lazy=\"false\" ç¦æ¢ä½¿ç”¨å»¶è¿Ÿè£…载。 "
#. Tag: para
#: basic_mapping.xml:2715
#, no-c-format
msgid ""
"Use the <literal><key> element to declare the primary key / "
"foreign key column. The mapping at the start of the chapter would then be re-"
"written as:"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:2719
#, fuzzy, no-c-format
msgid ""
"<?xml version=\"1.0\"?>\n"
"<!DOCTYPE hibernate-mapping PUBLIC\n"
" \"-//Hibernate/Hibernate Mapping DTD//EN\"\n"
" \"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd\">\n"
"\n"
"<hibernate-mapping package=\"eg\">\n"
"\n"
" <class name=\"Cat\" table=\"CATS\">\n"
" <id name=\"id\" column=\"uid\" type=\"long\">\n"
" <generator class=\"hilo\"/>\n"
" </id>\n"
" <property name=\"birthdate\" type=\"date\"/>\n"
" <property name=\"color\" not-null=\"true\"/>\n"
" <property name=\"sex\" not-null=\"true\"/>\n"
" <property name=\"weight\"/>\n"
" <many-to-one name=\"mate\"/>\n"
" <set name=\"kittens\">\n"
" <key column=\"MOTHER\"/>\n"
" <one-to-many class=\"Cat\"/>\n"
" </set>\n"
" <joined-subclass name=\"DomesticCat\" table="
"\"DOMESTIC_CATS\">\n"
" <key column=\"CAT\"/>\n"
" <property name=\"name\" type=\"string\"/>\n"
" </joined-subclass>\n"
" </class>\n"
"\n"
" <class name=\"eg.Dog\">\n"
" <!-- mapping for Dog could go here -->\n"
" </class>\n"
"\n"
"</hibernate-mapping>"
msgstr ""
"<?xml version=\"1.0\"?>\n"
"<!DOCTYPE hibernate-mapping PUBLIC\n"
" \"-//Hibernate/Hibernate Mapping DTD//EN\"\n"
" \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
"\n"
"<hibernate-mapping package=\"eg\">\n"
"\n"
" <class name=\"Cat\" table=\"CATS\">\n"
" <id name=\"id\" column=\"uid\" type=\"long\">\n"
" <generator class=\"hilo\"/>\n"
" </id>\n"
" <property name=\"birthdate\" type=\"date\"/>\n"
" <property name=\"color\" not-null=\"true\"/>\n"
" <property name=\"sex\" not-null=\"true\"/>\n"
" <property name=\"weight\"/>\n"
" <many-to-one name=\"mate\"/>\n"
" <set name=\"kittens\">\n"
" <key column=\"MOTHER\"/>\n"
" <one-to-many class=\"Cat\"/>\n"
" </set>\n"
" <joined-subclass name=\"DomesticCat\" table="
"\"DOMESTIC_CATS\">\n"
" <key column=\"CAT\"/>\n"
" <property name=\"name\" type=\"string\"/>\n"
" </joined-subclass>\n"
" </class>\n"
"\n"
" <class name=\"eg.Dog\">\n"
" <!-- mapping for Dog could go here -->\n"
" </class>\n"
"\n"
"</hibernate-mapping>"
#. Tag: title
#: basic_mapping.xml:2726
#, no-c-format
msgid "Table per class strategy"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2728
#, fuzzy, no-c-format
msgid ""
"A third option is to map only the concrete classes of an inheritance "
"hierarchy to tables. This is called the table-per-concrete-class strategy. "
"Each table defines all persistent states of the class, including the "
"inherited state. In Hibernate, it is not necessary to explicitly map such "
"inheritance hierarchies. You can map each class as a separate entity root. "
"However, if you wish use polymorphic associations (e.g. an association to "
"the superclass of your hierarchy), you need to use the union subclass "
"mapping."
msgstr ""
"第三ç§é€‰æ‹©æ˜¯ä»…ä»…æ˜ å°„ç±»ç»§æ‰¿æ ‘ä¸å…·ä½“类部分到表ä¸ï¼ˆæ¯ä¸ªå…·ä½“ç±»ä¸€å¼ è¡¨çš„ç–略)。其"
"ä¸ï¼Œæ¯å¼ 表定义了类的所有æŒä¹…化状æ€ï¼ŒåŒ…括继承的状æ€ã€‚在 Hibernate ä¸ï¼Œå¹¶ä¸éœ€è¦"
"完全显å¼åœ°æ˜ å°„è¿™æ ·çš„ç»§æ‰¿æ ‘ã€‚ä½ å¯ä»¥ç®€å•åœ°ä½¿ç”¨å•ç‹¬çš„ <literal><class> æ˜ å°„ã€‚ "
#. Tag: programlisting
#: basic_mapping.xml:2737
#, no-c-format
msgid ""
"@Entity\n"
"@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)\n"
"public class Flight implements Serializable { ... }"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2739
#, no-c-format
msgid "Or in hbm.xml:"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:2752
#, fuzzy, no-c-format
msgid ""
"<union-subclass\n"
" name=\"ClassName\"\n"
" table=\"tablename\"\n"
" proxy=\"ProxyInterface\"\n"
" lazy=\"true|false\"\n"
" dynamic-update=\"true|false\"\n"
" dynamic-insert=\"true|false\"\n"
" schema=\"schema\"\n"
" catalog=\"catalog\"\n"
" extends=\"SuperclassName\"\n"
" abstract=\"true|false\"\n"
" persister=\"ClassName\"\n"
" subselect=\"SQL expression\"\n"
" entity-name=\"EntityName\"\n"
" node=\"element-name\">\n"
"\n"
" <property .... />\n"
" .....\n"
"</union-subclass>"
msgstr ""
"<union-subclass\n"
" name=\"ClassName\"\n"
" table=\"tablename\"\n"
" proxy=\"ProxyInterface\"\n"
" lazy=\"true|false\"\n"
" dynamic-update=\"true|false\"\n"
" dynamic-insert=\"true|false\"\n"
" schema=\"schema\"\n"
" catalog=\"catalog\"\n"
" extends=\"SuperclassName\"\n"
" abstract=\"true|false\"\n"
" persister=\"ClassName\"\n"
" subselect=\"SQL expression\"\n"
" entity-name=\"EntityName\"\n"
" node=\"element-name\">\n"
"\n"
" <property .... />\n"
" .....\n"
"</union-subclass>"
#. Tag: para
#: basic_mapping.xml:2779
#, no-c-format
msgid ""
"No discriminator column or key column is required for this mapping strategy."
msgstr "è¿™ç§æ˜ å°„ç–ç•¥ä¸éœ€è¦æŒ‡å®šè¾¨åˆ«æ ‡å¿—(discriminator)å—段。"
#. Tag: title
#: basic_mapping.xml:2787
#, no-c-format
msgid "Inherit properties from superclasses"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2789
#, no-c-format
msgid ""
"This is sometimes useful to share common properties through a technical or a "
"business superclass without including it as a regular mapped entity (ie no "
"specific table for this entity). For that purpose you can map them as "
"<literal>@MappedSuperclass."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:2794
#, no-c-format
msgid ""
"@MappedSuperclass\n"
"public class BaseEntity {\n"
" @Basic\n"
" @Temporal(TemporalType.TIMESTAMP)\n"
" public Date getLastUpdate() { ... }\n"
" public String getLastUpdater() { ... }\n"
" ...\n"
"}\n"
"\n"
"@Entity class Order extends BaseEntity {\n"
" @Id public Integer getId() { ... }\n"
" ...\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2796
#, no-c-format
msgid ""
"In database, this hierarchy will be represented as an <literal>Orderid, lastUpdatelastUpdater columns. The embedded superclass "
"property mappings are copied into their entity subclasses. Remember that the "
"embeddable superclass is not the root of the hierarchy though."
msgstr ""
#. Tag: para
#: basic_mapping.xml:2804
#, no-c-format
msgid ""
"Properties from superclasses not mapped as <literal>@MappedSuperclass annotation."
msgstr ""
#. Tag: para
#: basic_mapping.xml:2814
#, no-c-format
msgid ""
"The same notion can be applied to <literal>@Embeddable objects to "
"persist properties from their superclasses. You also need to use "
"<literal>@MappedSuperclass to do that (this should not be "
"considered as a standard EJB3 feature though)"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2822
#, no-c-format
msgid ""
"It is allowed to mark a class as <literal>@MappedSuperclass in the "
"middle of the mapped inheritance hierarchy."
msgstr ""
#. Tag: para
#: basic_mapping.xml:2828
#, no-c-format
msgid ""
"Any class in the hierarchy non annotated with <literal>@MappedSuperclass@Entity will be ignored."
msgstr ""
#. Tag: para
#: basic_mapping.xml:2833
#, no-c-format
msgid ""
"You can override columns defined in entity superclasses at the root entity "
"level using the <literal>@AttributeOverride annotation."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:2837
#, no-c-format
msgid ""
"@MappedSuperclass\n"
"public class FlyingObject implements Serializable {\n"
"\n"
" public int getAltitude() {\n"
" return altitude;\n"
" }\n"
"\n"
" @Transient\n"
" public int getMetricAltitude() {\n"
" return metricAltitude;\n"
" }\n"
"\n"
" @ManyToOne\n"
" public PropulsionType getPropulsion() {\n"
" return metricAltitude;\n"
" }\n"
" ...\n"
"}\n"
"\n"
"@Entity\n"
"@AttributeOverride( name=\"altitude\", column = @Column(name=\"fld_altitude"
"\") )\n"
"@AssociationOverride( \n"
" name=\"propulsion\", \n"
" joinColumns = @JoinColumn(name=\"fld_propulsion_fk\") \n"
")\n"
"public class Plane extends FlyingObject {\n"
" ...\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2839
#, no-c-format
msgid ""
"The <literal>altitude property will be persisted in an "
"<literal>fld_altitude column of table Plane and "
"the propulsion association will be materialized in a "
"<literal>fld_propulsion_fk foreign key column."
msgstr ""
#. Tag: para
#: basic_mapping.xml:2845
#, no-c-format
msgid ""
"You can define <literal>@AttributeOverride(s) and "
"<literal>@AssociationOverride(s) on @Entity "
"classes, <literal>@MappedSuperclass classes and properties "
"pointing to an <literal>@Embeddable object."
msgstr ""
#. Tag: para
#: basic_mapping.xml:2851
#, no-c-format
msgid ""
"In hbm.xml, simply map the properties of the superclass in the <literal><"
"class></literal> element of the entity that needs to inherit them."
msgstr ""
#. Tag: title
#: basic_mapping.xml:2857
#, no-c-format
msgid "Mapping one entity to several tables"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2859
#, no-c-format
msgid ""
"While not recommended for a fresh schema, some legacy databases force your "
"to map a single entity on several tables."
msgstr ""
#. Tag: para
#: basic_mapping.xml:2862
#, no-c-format
msgid ""
"Using the <literal>@SecondaryTable or @SecondaryTables parameter of "
"<literal>@Column or @JoinColumn ."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:2868
#, no-c-format
msgid ""
"@Entity\n"
"@Table(name=\"MainCat\")\n"
"@SecondaryTables({\n"
" @SecondaryTable(name=\"Cat1\", pkJoinColumns={\n"
" @PrimaryKeyJoinColumn(name=\"cat_id\", referencedColumnName=\"id\")\n"
" ),\n"
" @SecondaryTable(name=\"Cat2\", uniqueConstraints={@UniqueConstraint"
"(columnNames={\"storyPart2\"})})\n"
"})\n"
"public class Cat implements Serializable {\n"
"\n"
" private Integer id;\n"
" private String name;\n"
" private String storyPart1;\n"
" private String storyPart2;\n"
"\n"
" @Id @GeneratedValue\n"
" public Integer getId() {\n"
" return id;\n"
" }\n"
"\n"
" public String getName() {\n"
" return name;\n"
" }\n"
" \n"
" @Column(table=\"Cat1\")\n"
" public String getStoryPart1() {\n"
" return storyPart1;\n"
" }\n"
"\n"
" @Column(table=\"Cat2\")\n"
" public String getStoryPart2() {\n"
" return storyPart2;\n"
" }\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:2870
#, no-c-format
msgid ""
"In this example, <literal>name will be in MainCatstoryPart1 will be in Cat1 "
"and <literal>storyPart2 will be in Cat2 . "
"<literal>Cat1 will be joined to MainCat using "
"the <literal>cat_id as a foreign key, and Cat2 "
"using <literal>id (ie the same column name, the MainCatstoryPart2: If set to JOIN, the default, Hibernate will use an "
"inner join to retrieve a secondary table defined by a class or its "
"superclasses and an outer join for a secondary table defined by a subclass. "
"If set to <classname>SELECT then Hibernate will use a sequential "
"select for a secondary table defined on a subclass, which will be issued "
"only if a row turns out to represent an instance of the subclass. Inner "
"joins will still be used to retrieve a secondary defined by the class and "
"its superclasses."
msgstr ""
"<literal>fetch (å¯é€‰ — 默认是 join ):如果设置为"
"默认值 <literal>join,Hibernate 将使用一个内连接æ¥å¾—到这个类或其超"
"类定义的 <literal><join>,而使用一个外连接æ¥å¾—到其å类定义的 "
"<literal><join>。如果设置为 select ,则 "
"Hibernate 将为å类定义的 <literal><join> 使用顺åºé€‰æ‹©ã€‚这仅在"
"一行数æ®è¡¨ç¤ºä¸€ä¸ªå类的对象的时候æ‰ä¼šå‘生。对这个类和其超类定义的 "
"<literal><join>,ä¾ç„¶ä¼šä½¿ç”¨å†…连接得到。 "
#. Tag: para
#: basic_mapping.xml:2898
#, fuzzy, no-c-format
msgid ""
"<literal>inverse: If true, Hibernate will not try to insert or "
"update the properties defined by this join. Default to false."
msgstr ""
"<literal>inverse(å¯é€‰ — 默认是 false ):如果打"
"开,Hibernate ä¸ä¼šæ’入或者更新æ¤è¿žæŽ¥å®šä¹‰çš„属性。 "
#. Tag: para
#: basic_mapping.xml:2904
#, fuzzy, no-c-format
msgid ""
"<literal>optional: If enabled (the default), Hibernate will insert "
"a row only if the properties defined by this join are non-null and will "
"always use an outer join to retrieve the properties."
msgstr ""
"<literal>optional(å¯é€‰ — 默认是 false ):如果打"
"开,Hibernate åªä¼šåœ¨æ¤è¿žæŽ¥å®šä¹‰çš„属性éžç©ºæ—¶æ’入一行数æ®ï¼Œå¹¶ä¸”总是使用一个外连"
"接æ¥å¾—到这些属性。 "
#. Tag: para
#: basic_mapping.xml:2911
#, no-c-format
msgid ""
"<literal>foreignKey: defines the Foreign Key name of a secondary "
"table pointing back to the primary table."
msgstr ""
#. Tag: para
#: basic_mapping.xml:2916
#, no-c-format
msgid ""
"Make sure to use the secondary table name in the <methodname>appliesto element."
msgstr "例如,如果我们有如下的 <literal><properties> æ˜ å°„ï¼š"
#. Tag: programlisting
#: basic_mapping.xml:2939
#, fuzzy, no-c-format
msgid ""
"<join\n"
" table=\"tablename\"\n"
" schema=\"owner\"\n"
" catalog=\"catalog\"\n"
" fetch=\"join|select\"\n"
" inverse=\"true|false\"\n"
" optional=\"true|false\">\n"
"\n"
" <key ... />\n"
"\n"
" <property ... />\n"
" ...\n"
"</join>"
msgstr ""
"<join\n"
" table=\"tablename\"\n"
" schema=\"owner\"\n"
" catalog=\"catalog\"\n"
" fetch=\"join|select\"\n"
" inverse=\"true|false\"\n"
" optional=\"true|false\">\n"
" \n"
" <key ... />\n"
" \n"
" <property ... />\n"
" ...\n"
"</join>"
#. Tag: para
#: basic_mapping.xml:2943
#, no-c-format
msgid "<literal>table: the name of the joined table."
msgstr "<literal>table:被连接表的å称。 "
#. Tag: para
#: basic_mapping.xml:2960
#, no-c-format
msgid ""
"<literal>fetch (optional - defaults to join ): "
"if set to <literal>join, the default, Hibernate will use an inner "
"join to retrieve a <literal><join> defined by a class or its "
"superclasses. It will use an outer join for a <literal><join>select then "
"Hibernate will use a sequential select for a <literal><join> "
"defined on a subclass. This will be issued only if a row represents an "
"instance of the subclass. Inner joins will still be used to retrieve a "
"<literal><join> defined by the class and its superclasses."
msgstr ""
"<literal>fetch(å¯é€‰ — 默认是 join ):如果设置为"
"默认值 <literal>join,Hibernate 将使用一个内连接æ¥å¾—到这个类或其超"
"类定义的 <literal><join>,而使用一个外连接æ¥å¾—到其å类定义的 "
"<literal><join>。如果设置为 select ,则 "
"Hibernate 将为å类定义的 <literal><join> 使用顺åºé€‰æ‹©ã€‚这仅在"
"一行数æ®è¡¨ç¤ºä¸€ä¸ªå类的对象的时候æ‰ä¼šå‘生。对这个类和其超类定义的 "
"<literal><join>,ä¾ç„¶ä¼šä½¿ç”¨å†…连接得到。 "
#. Tag: para
#: basic_mapping.xml:2975
#, no-c-format
msgid ""
"<literal>inverse (optional - defaults to false(å¯é€‰ — 默认是 false ):如果打"
"开,Hibernate ä¸ä¼šæ’入或者更新æ¤è¿žæŽ¥å®šä¹‰çš„属性。 "
#. Tag: para
#: basic_mapping.xml:2981
#, no-c-format
msgid ""
"<literal>optional (optional - defaults to false(å¯é€‰ — 默认是 false ):如果打"
"开,Hibernate åªä¼šåœ¨æ¤è¿žæŽ¥å®šä¹‰çš„属性éžç©ºæ—¶æ’入一行数æ®ï¼Œå¹¶ä¸”总是使用一个外连"
"接æ¥å¾—到这些属性。 "
#. Tag: para
#: basic_mapping.xml:2989
#, no-c-format
msgid ""
"For example, address information for a person can be mapped to a separate "
"table while preserving value type semantics for all properties:"
msgstr ""
"例如,一个人(person)的地å€ï¼ˆaddress)信æ¯å¯ä»¥è¢«æ˜ 射到å•ç‹¬çš„表ä¸ï¼ˆå¹¶ä¿ç•™æ‰€æœ‰"
"属性的值类型è¯ä¹‰ï¼‰ï¼š "
#. Tag: programlisting
#: basic_mapping.xml:2993
#, fuzzy, no-c-format
msgid ""
"<class name=\"Person\"\n"
" table=\"PERSON\">\n"
"\n"
" <id name=\"id\" column=\"PERSON_ID\">...</id>\n"
"\n"
" <join table=\"ADDRESS\">\n"
" <key column=\"ADDRESS_ID\"/>\n"
" <property name=\"address\"/>\n"
" <property name=\"zip\"/>\n"
" <property name=\"country\"/>\n"
" </join>\n"
" ..."
msgstr ""
"<class name=\"Person\"\n"
" table=\"PERSON\">\n"
"\n"
" <id name=\"id\" column=\"PERSON_ID\">...</id>\n"
"\n"
" <join table=\"ADDRESS\">\n"
" <key column=\"ADDRESS_ID\"/>\n"
" <property name=\"address\"/>\n"
" <property name=\"zip\"/>\n"
" <property name=\"country\"/>\n"
" </join>\n"
" ..."
#. Tag: para
#: basic_mapping.xml:2995
#, no-c-format
msgid ""
"This feature is often only useful for legacy data models. We recommend fewer "
"tables than classes and a fine-grained domain model. However, it is useful "
"for switching between inheritance mapping strategies in a single hierarchy, "
"as explained later."
msgstr ""
"æ¤ç‰¹æ€§å¸¸å¸¸å¯¹é—留数æ®æ¨¡åž‹æœ‰ç”¨ï¼Œæˆ‘们推è表个数比类个数少,以åŠç»†ç²’度的领域模"
"型。然而,在å•ç‹¬çš„ç»§æ‰¿æ ‘ä¸Šåˆ‡æ¢ç»§æ‰¿æ˜ å°„ç–略是有用的,åŽé¢ä¼šè§£é‡Šè¿™ç‚¹ã€‚ "
#. Tag: title
#: basic_mapping.xml:3003
#, no-c-format
msgid "Mapping one to one and one to many associations"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3005
#, no-c-format
msgid ""
"To link one entity to an other, you need to map the association property as "
"a to one association. In the relational model, you can either use a foreign "
"key or an association table, or (a bit less common) share the same primary "
"key value between the two entities."
msgstr ""
#. Tag: para
#: basic_mapping.xml:3010
#, no-c-format
msgid ""
"To mark an association, use either <classname>@ManyToOne or "
"<classname>@OnetoOne."
msgstr ""
#. Tag: para
#: basic_mapping.xml:3014
#, no-c-format
msgid ""
"<literal>@ManyToOne and @OneToOne have a "
"parameter named <literal>targetEntity which describes the target "
"entity name. You usually don't need this parameter since the default value "
"(the type of the property that stores the association) is good in almost all "
"cases. However this is useful when you want to use interfaces as the return "
"type instead of the regular entity."
msgstr ""
#. Tag: para
#: basic_mapping.xml:3021
#, no-c-format
msgid ""
"Setting a value of the <literal>cascade attribute to any "
"meaningful value other than nothing will propagate certain operations to the "
"associated object. The meaningful values are divided into three categories."
msgstr ""
#. Tag: para
#: basic_mapping.xml:3028
#, no-c-format
msgid ""
"basic operations, which include: <literal>persist, merge, delete, save-"
"update, evict, replicate, lock and refresh</literal>;"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3034
#, fuzzy, no-c-format
msgid ""
"special values: <literal>delete-orphan or all ;"
msgstr ""
"注æ„这里关è”是如何用 <literal>entity-name æ¥ä»£æ›¿ classcascade=\"all,delete-orphan\" . "
"See <xref linkend=\"objectstate-transitive\"/> for a full explanation. Note "
"that single valued many-to-one associations do not support orphan delete."
msgstr ""
#. Tag: para
#: basic_mapping.xml:3048
#, no-c-format
msgid ""
"By default, single point associations are eagerly fetched in JPA 2. You can "
"mark it as lazily fetched by using <classname>@ManyToOne(fetch=FetchType."
"LAZY) </classname>in which case Hibernate will proxy the association and "
"load it when the state of the associated entity is reached. You can force "
"Hibernate not to use a proxy by using <classname>@LazyToOne(NO_PROXY), or a SQL JOIN is used "
"for <literal>EAGER associations. You can however adjust the "
"fetching strategy, ie how data is fetched by using <literal>@FetchFetchMode can be SELECT (a "
"select is triggered when the association needs to be loaded) or "
"<literal>JOIN (use a SQL JOIN to load the association while "
"loading the owner entity). <literal>JOIN overrides any lazy "
"attribute (an association loaded through a <literal>JOIN strategy "
"cannot be lazy)."
msgstr ""
#. Tag: title
#: basic_mapping.xml:3070
#, fuzzy, no-c-format
msgid "Using a foreign key or an association table"
msgstr "惟一外键关è”"
#. Tag: para
#: basic_mapping.xml:3072
#, fuzzy, no-c-format
msgid "An ordinary association to another persistent class is declared using a"
msgstr ""
"æŒä¹…化对象之间一对一的关è”关系是通过 <literal>one-to-one å…ƒç´ å®šä¹‰"
"的。"
#. Tag: para
#: basic_mapping.xml:3077
#, no-c-format
msgid ""
"<classname>@ManyToOne if several entities can point to the the "
"target entity"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3082
#, no-c-format
msgid ""
"<classname>@OneToOne if only a single entity can point to the "
"the target entity"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3087
#, no-c-format
msgid ""
"and a foreign key in one table is referencing the primary key column(s) of "
"the target table."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:3090
#, no-c-format
msgid ""
"@Entity\n"
"public class Flight implements Serializable {\n"
" @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )\n"
" @JoinColumn(name=\"COMP_ID\")\n"
" public Company getCompany() {\n"
" return company;\n"
" }\n"
" ...\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3092
#, no-c-format
msgid ""
"The <literal>@JoinColumn attribute is optional, the default value"
"(s) is the concatenation of the name of the relationship in the owner side, "
"<keycap>_ (underscore), and the name of the primary key column in "
"the owned side. In this example <literal>company_id because the "
"property name is <literal>company and the column id of Company is "
"<literal>id."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:3100
#, no-c-format
msgid ""
"@Entity\n"
"public class Flight implements Serializable {\n"
" @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE}, "
"targetEntity=CompanyImpl.class )\n"
" @JoinColumn(name=\"COMP_ID\")\n"
" public Company getCompany() {\n"
" return company;\n"
" }\n"
" ...\n"
"}\n"
"\n"
"public interface Company {\n"
" ...\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3102
#, no-c-format
msgid ""
"You can also map a to one association through an association table. This "
"association table described by the <literal>@JoinTable annotation "
"will contains a foreign key referencing back the entity table (through "
"<literal>@JoinTable.joinColumns) and a a foreign key referencing "
"the target entity table (through <literal>@JoinTable.inverseJoinColumns / "
"<classname>@JoinColumnOrformulas annotations (just like you can "
"use a SQL fragment to simulate a property column via the "
"<classname>@Formula annotation)."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:3119
#, no-c-format
msgid ""
"@Entity\n"
"public class Ticket implements Serializable {\n"
" @ManyToOne\n"
" @JoinColumnOrFormula(formula=\"(firstname + ' ' + lastname)\")\n"
" public Person getOwner() {\n"
" return person;\n"
" }\n"
" ...\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3122
#, no-c-format
msgid ""
"You can mark an association as mandatory by using the "
"<literal>optional=false attribute. We recommend to use Bean "
"Validation's <classname>@NotNull annotation as a better "
"alternative however. As a consequence, the foreign key column(s) will be "
"marked as not nullable (if possible)."
msgstr ""
#. Tag: para
#: basic_mapping.xml:3128
#, no-c-format
msgid ""
"When Hibernate cannot resolve the association because the expected "
"associated element is not in database (wrong id on the association column), "
"an exception is raised. This might be inconvenient for legacy and badly "
"maintained schemas. You can ask Hibernate to ignore such elements instead of "
"raising an exception using the <literal>@NotFound annotation."
msgstr ""
#. Tag: title
#: basic_mapping.xml:3136
#, no-c-format
msgid "@NotFound annotation"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:3138
#, no-c-format
msgid ""
"@Entity\n"
"public class Child {\n"
" ...\n"
" @ManyToOne\n"
" @NotFound(action=NotFoundAction.IGNORE)\n"
" public Parent getParent() { ... }\n"
" ...\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3141
#, no-c-format
msgid ""
"Sometimes you want to delegate to your database the deletion of cascade when "
"a given entity is deleted. In this case Hibernate generates a cascade delete "
"constraint at the database level."
msgstr ""
#. Tag: title
#: basic_mapping.xml:3146
#, no-c-format
msgid "@OnDelete annotation"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:3148
#, no-c-format
msgid ""
"@Entity\n"
"public class Child {\n"
" ...\n"
" @ManyToOne\n"
" @OnDelete(action=OnDeleteAction.CASCADE)\n"
" public Parent getParent() { ... }\n"
" ...\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3151
#, no-c-format
msgid ""
"Foreign key constraints, while generated by Hibernate, have a fairly "
"unreadable name. You can override the constraint name using "
"<literal>@ForeignKey."
msgstr ""
#. Tag: title
#: basic_mapping.xml:3156
#, fuzzy, no-c-format
msgid "@ForeignKey annotation"
msgstr "惟一外键关è”"
#. Tag: programlisting
#: basic_mapping.xml:3158
#, no-c-format
msgid ""
"@Entity\n"
"public class Child {\n"
" ...\n"
" @ManyToOne\n"
" @ForeignKey(name=\"FK_PARENT\")\n"
" public Parent getParent() { ... }\n"
" ...\n"
"}\n"
"\n"
"alter table Child add constraint FK_PARENT foreign key (parent_id) "
"references Parent"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3161
#, no-c-format
msgid ""
"Sometimes, you want to link one entity to an other not by the target entity "
"primary key but by a different unique key. You can achieve that by "
"referencing the unique key column(s) in <methodname>@JoinColumn."
"referenceColumnName</methodname>."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:3166 basic_mapping.xml:3718
#, no-c-format
msgid ""
"@Entity\n"
"class Person {\n"
" @Id Integer personNumber;\n"
" String firstName;\n"
" @Column(name=\"I\")\n"
" String initial;\n"
" String lastName;\n"
"}\n"
"\n"
"@Entity\n"
"class Home {\n"
" @ManyToOne\n"
" @JoinColumns({\n"
" @JoinColumn(name=\"first_name\", referencedColumnName=\"firstName\"),\n"
" @JoinColumn(name=\"init\", referencedColumnName=\"I\"),\n"
" @JoinColumn(name=\"last_name\", referencedColumnName=\"lastName\"),\n"
" })\n"
" Person owner\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3168
#, no-c-format
msgid ""
"This is not encouraged however and should be reserved to legacy mappings."
msgstr ""
#. Tag: para
#: basic_mapping.xml:3171
#, no-c-format
msgid ""
"In hbm.xml, mapping an association is similar. The main difference is that a "
"<classname>@OneToOne is mapped as <many-to-one "
"unique=\"true\"/></literal>, let's dive into the subject."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:3213
#, fuzzy, no-c-format
msgid ""
"<many-to-one\n"
" name=\"propertyName\"\n"
" column=\"column_name\"\n"
" class=\"ClassName\"\n"
" cascade=\"cascade_style\"\n"
" fetch=\"join|select\"\n"
" update=\"true|false\"\n"
" insert=\"true|false\"\n"
" property-ref=\"propertyNameFromAssociatedClass\"\n"
" access=\"field|property|ClassName\"\n"
" unique=\"true|false\"\n"
" not-null=\"true|false\"\n"
" optimistic-lock=\"true|false\"\n"
" lazy=\"proxy|no-proxy|false\"\n"
" not-found=\"ignore|exception\"\n"
" entity-name=\"EntityName\"\n"
" formula=\"arbitrary SQL expression\"\n"
" node=\"element-name|@attribute-name|element/@attribute|.\"\n"
" embed-xml=\"true|false\"\n"
" index=\"index_name\"\n"
" unique_key=\"unique_key_id\"\n"
" foreign-key=\"foreign_key_name\"\n"
"/>"
msgstr ""
"<many-to-one\n"
" name=\"propertyName\"\n"
" column=\"column_name\"\n"
" class=\"ClassName\"\n"
" cascade=\"cascade_style\"\n"
" fetch=\"join|select\"\n"
" update=\"true|false\"\n"
" insert=\"true|false\"\n"
" property-ref=\"propertyNameFromAssociatedClass\"\n"
" access=\"field|property|ClassName\"\n"
" unique=\"true|false\"\n"
" not-null=\"true|false\"\n"
" optimistic-lock=\"true|false\"\n"
" lazy=\"proxy|no-proxy|false\"\n"
" not-found=\"ignore|exception\"\n"
" entity-name=\"EntityName\"\n"
" formula=\"arbitrary SQL expression\"\n"
" node=\"element-name|@attribute-name|element/@attribute|.\"\n"
" embed-xml=\"true|false\"\n"
" index=\"index_name\"\n"
" unique_key=\"unique_key_id\"\n"
" foreign-key=\"foreign_key_name\"\n"
"/>"
#. Tag: para
#: basic_mapping.xml:3221 basic_mapping.xml:3904
#, no-c-format
msgid ""
"<literal>column (optional): the name of the foreign key column. "
"This can also be specified by nested <literal><column> "
"element(s)."
msgstr ""
"<literal>column(å¯é€‰ï¼‰ï¼šå¤–é”®å—段的å称。也å¯ä»¥é€šè¿‡åµŒå¥—çš„ "
"<literal><column> 指定。 "
#. Tag: para
#: basic_mapping.xml:3227 basic_mapping.xml:3421
#, no-c-format
msgid ""
"<literal>class (optional - defaults to the property type "
"determined by reflection): the name of the associated class."
msgstr ""
"<literal>class(å¯é€‰ — 默认是通过å射得到的属性类型):被关è”的类的"
"åå—。 "
#. Tag: para
#: basic_mapping.xml:3233 basic_mapping.xml:3427
#, no-c-format
msgid ""
"<literal>cascade (optional): specifies which operations should be "
"cascaded from the parent object to the associated object."
msgstr ""
"<literal>cascade(级è”)(å¯é€‰ï¼‰è¡¨æ˜Žæ“作是å¦ä»Žçˆ¶å¯¹è±¡çº§è”到被关è”çš„"
"对象。 "
#. Tag: para
#: basic_mapping.xml:3239 basic_mapping.xml:3443
#, no-c-format
msgid ""
"<literal>fetch (optional - defaults to select ): "
"chooses between outer-join fetching or sequential select fetching."
msgstr ""
"<literal>fetch(å¯é€‰ — 默认为 select ):在外连接"
"抓å–(outer-join fetching)和åºåˆ—选择抓å–(sequential select fetching)两者ä¸"
"选择其一。 "
#. Tag: para
#: basic_mapping.xml:3245
#, no-c-format
msgid ""
"<literal>update, insert (optional - defaults to true and/or INSERT statements. "
"Setting both to <literal>false allows a pure \"derived\" "
"association whose value is initialized from another property that maps to "
"the same column(s), or by a trigger or other application."
msgstr ""
"<literal>update, insert(å¯é€‰ — 默认为 true )指"
"定对应的å—段是å¦åŒ…å«åœ¨ç”¨äºŽ <literal>UPDATE å’Œ/或 INSERTfalse ,则这是一个纯粹"
"çš„ “外æºæ€§ï¼ˆderived)â€å…³è”ï¼Œå®ƒçš„å€¼æ˜¯é€šè¿‡æ˜ å°„åˆ°åŒä¸€ä¸ªï¼ˆæˆ–多个)å—段的æŸäº›å…¶ä»–"
"属性得到 或者通过 trigger(触å‘器)ã€æˆ–其他程åºç”Ÿæˆã€‚ "
#. Tag: para
#: basic_mapping.xml:3255
#, no-c-format
msgid ""
"<literal>property-ref (optional): the name of a property of the "
"associated class that is joined to this foreign key. If not specified, the "
"primary key of the associated class is used."
msgstr ""
"<literal>property-ref:(å¯é€‰ï¼‰è¢«å…³è”到æ¤å¤–键的类ä¸çš„对应属性的å"
"å—。如果没有指定,被关è”类的主键将被使用。 "
#. Tag: para
#: basic_mapping.xml:3268
#, no-c-format
msgid ""
"<literal>unique (optional): enables the DDL generation of a unique "
"constraint for the foreign-key column. By allowing this to be the target of "
"a <literal>property-ref, you can make the association multiplicity "
"one-to-one."
msgstr ""
"<literal>unique(å¯é€‰ï¼‰ï¼šä½¿ç”¨ DDL 为外键å—段生æˆä¸€ä¸ªå”¯ä¸€çº¦æŸã€‚æ¤"
"外, 这也å¯ä»¥ç”¨ä½œ <literal>property-ref çš„ç›®æ ‡å±žæ€§ã€‚è¿™ä½¿å…³è”åŒæ—¶å…·"
"有一对一的效果。 "
#. Tag: para
#: basic_mapping.xml:3276
#, no-c-format
msgid ""
"<literal>not-null (optional): enables the DDL generation of a "
"nullability constraint for the foreign key columns."
msgstr ""
"<literal>not-null(å¯é€‰ï¼‰ï¼šä½¿ç”¨ DDL 为外键å—段生æˆä¸€ä¸ªéžç©ºçº¦æŸã€‚ "
#. Tag: para
#: basic_mapping.xml:3290
#, no-c-format
msgid ""
"<literal>lazy (optional - defaults to proxy ): "
"by default, single point associations are proxied. <literal>lazy=\"no-proxy"
"\"</literal> specifies that the property should be fetched lazily when the "
"instance variable is first accessed. This requires build-time bytecode "
"instrumentation. <literal>lazy=\"false\" specifies that the "
"association will always be eagerly fetched."
msgstr ""
"<literal>lazy(å¯é€‰ — 默认为 proxy ):默认情况"
"下,å•ç‚¹å…³è”是ç»è¿‡ä»£ç†çš„。<literal>lazy=\"no-proxy\" 指定æ¤å±žæ€§åº”该"
"在实例å˜é‡ç¬¬ä¸€æ¬¡è¢«è®¿é—®æ—¶åº”该延迟抓å–(fetche lazily)(需è¦è¿è¡Œæ—¶å—节ç 的增"
"强)。<literal>lazy=\"false\" 指定æ¤å…³è”总是被预先抓å–。 "
#. Tag: para
#: basic_mapping.xml:3300
#, no-c-format
msgid ""
"<literal>not-found (optional - defaults to exception will treat a missing row as a null "
"association."
msgstr ""
"<literal>not-found (å¯é€‰ - 默认为exception ):指"
"定如何处ç†å¼•ç”¨ç¼ºå¤±è¡Œçš„外键:<literal>ignore 会把缺失的行作为一个空"
"å…³è”处ç†ã€‚ "
#. Tag: para
#: basic_mapping.xml:3308 basic_mapping.xml:3484
#, no-c-format
msgid ""
"<literal>entity-name (optional): the entity name of the associated "
"class."
msgstr "<literal>entity-name(å¯é€‰ï¼‰ï¼šè¢«å…³è”的类的实体å。 "
#. Tag: para
#: basic_mapping.xml:3313
#, no-c-format
msgid ""
"<literal>formula (optional): an SQL expression that defines the "
"value for a <emphasis>computed foreign key."
msgstr ""
"<literal>formula(å¯é€‰ï¼‰ï¼šSQL 表达å¼ï¼Œç”¨äºŽå®šä¹‰ computed"
"(计算出的)</emphasis>外键值。"
#. Tag: para
#: basic_mapping.xml:3320
#, fuzzy, no-c-format
msgid ""
"Setting a value of the <literal>cascade attribute to any "
"meaningful value other than <literal>none will propagate certain "
"operations to the associated object. The meaningful values are divided into "
"three categories. First, basic operations, which include: <literal>persist, "
"merge, delete, save-update, evict, replicate, lock and refresh</literal>; "
"second, special values: <literal>delete-orphan; and third,"
"<literal>all comma-separated combinations of operation names: "
"<literal>cascade=\"persist,merge,evict\" or cascade=\"all,"
"delete-orphan\"</literal>. See "
"for a full explanation. Note that single valued, many-to-one and one-to-one, "
"associations do not support orphan delete."
msgstr ""
"<literal>cascade 属性设置为除了none 以外任何有æ„"
"义的值,它将把特定的æ“ä½œä¼ é€’åˆ°å…³è”对象ä¸ã€‚è¿™ä¸ªå€¼å°±ä»£è¡¨ç€ Hibernate 基本æ“作的"
"å称,<literal>persist, merge, delete, save-update, evict, replicate, lock, "
"refresh</literal>,以åŠç‰¹åˆ«çš„值 delete-orphan å’Œ "
"<literal>all,并且å¯ä»¥ç”¨é€—å·åˆ†éš”符æ¥ç»„åˆè¿™äº›æ“作,例如,"
"<literal>cascade=\"persist,merge,evict\" 或 cascade="
"\"all,delete-orphan\"</literal>。更全é¢çš„解释请å‚考 declaration:"
msgstr "ä¸€ä¸ªå…¸åž‹çš„ç®€å• <literal>many-to-one 定义例å: "
#. Tag: programlisting
#: basic_mapping.xml:3337
#, fuzzy, no-c-format
msgid ""
"<many-to-one name=\"product\" class=\"Product\" column=\"PRODUCT_ID\"/>"
msgstr ""
"<many-to-one name=\"product\" class=\"Product\" column=\"PRODUCT_ID\"/>"
#. Tag: para
#: basic_mapping.xml:3339
#, no-c-format
msgid ""
"The <literal>property-ref attribute should only be used for "
"mapping legacy data where a foreign key refers to a unique key of the "
"associated table other than the primary key. This is a complicated and "
"confusing relational model. For example, if the <literal>Product "
"class had a unique serial number that is not the primary key. The "
"<literal>unique attribute controls Hibernate's DDL generation with "
"the SchemaExport tool."
msgstr ""
"<literal>property-ref 属性åªåº”该用æ¥å¯¹ä»˜é—留下æ¥çš„æ•°æ®åº“系统,å¯èƒ½"
"有外键指å‘对方关è”表的是个éžä¸»é”®å—段(但是应该是一个惟一关键å—)的情况下。这"
"是一ç§å分丑陋的关系模型。比如说,å‡è®¾ <literal>Product 类有一个惟"
"一的åºåˆ—å·ï¼Œå®ƒå¹¶ä¸æ˜¯ä¸»é”®ã€‚(<literal>unique 属性控制 Hibernate 通"
"过 SchemaExport 工具进行的 DDL 生æˆã€‚) "
#. Tag: programlisting
#: basic_mapping.xml:3347
#, fuzzy, no-c-format
msgid ""
"<property name=\"serialNumber\" unique=\"true\" type=\"string\" column="
"\"SERIAL_NUMBER\"/>"
msgstr ""
"<property name=\"serialNumber\" unique=\"true\" type=\"string\" column="
"\"SERIAL_NUMBER\"/>"
#. Tag: para
#: basic_mapping.xml:3349
#, no-c-format
msgid "Then the mapping for <literal>OrderItem might use:"
msgstr "那么关于 <literal>OrderItem çš„æ˜ å°„å¯èƒ½æ˜¯ï¼š"
#. Tag: programlisting
#: basic_mapping.xml:3352
#, fuzzy, no-c-format
msgid ""
"<many-to-one name=\"product\" property-ref=\"serialNumber\" column="
"\"PRODUCT_SERIAL_NUMBER\"/>"
msgstr ""
"<many-to-one name=\"product\" property-ref=\"serialNumber\" column="
"\"PRODUCT_SERIAL_NUMBER\"/>"
#. Tag: para
#: basic_mapping.xml:3354
#, no-c-format
msgid "This is not encouraged, however."
msgstr "当然,我们决ä¸é¼“励这ç§ç”¨æ³•ã€‚ "
#. Tag: para
#: basic_mapping.xml:3356
#, no-c-format
msgid ""
"If the referenced unique key comprises multiple properties of the associated "
"entity, you should map the referenced properties inside a named <literal><"
"properties></literal> element."
msgstr ""
"如果被引用的唯一主键由关è”实体的多个属性组æˆï¼Œä½ 应该在å称为 <literal><"
"properties></literal> çš„å…ƒç´ é‡Œé¢æ˜ 射所有关è”的属性。"
#. Tag: para
#: basic_mapping.xml:3360
#, no-c-format
msgid ""
"If the referenced unique key is the property of a component, you can specify "
"a property path:"
msgstr "å‡è‹¥è¢«å¼•ç”¨çš„å”¯ä¸€ä¸»é”®æ˜¯ç»„ä»¶çš„å±žæ€§ï¼Œä½ å¯ä»¥æŒ‡å®šå±žæ€§è·¯å¾„: "
#. Tag: programlisting
#: basic_mapping.xml:3363
#, fuzzy, no-c-format
msgid ""
"<many-to-one name=\"owner\" property-ref=\"identity.ssn\" column="
"\"OWNER_SSN\"/>"
msgstr ""
"<many-to-one name=\"owner\" property-ref=\"identity.ssn\" column="
"\"OWNER_SSN\"/>"
#. Tag: title
#: basic_mapping.xml:3367
#, no-c-format
msgid "Sharing the primary key with the associated entity"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3369
#, no-c-format
msgid ""
"The second approach is to ensure an entity and its associated entity share "
"the same primary key. In this case the primary key column is also a foreign "
"key and there is no extra column. These associations are always one to one."
msgstr ""
#. Tag: title
#: basic_mapping.xml:3375
#, fuzzy, no-c-format
msgid "One to One association"
msgstr "惟一外键关è”"
#. Tag: programlisting
#: basic_mapping.xml:3377
#, no-c-format
msgid ""
"@Entity\n"
"public class Body {\n"
" @Id\n"
" public Long getId() { return id; }\n"
"\n"
" @OneToOne(cascade = CascadeType.ALL)\n"
" @MapsId\n"
" public Heart getHeart() {\n"
" return heart;\n"
" }\n"
" ...\n"
"} \n"
"\n"
"@Entity\n"
"public class Heart {\n"
" @Id\n"
" public Long getId() { ...}\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3381
#, no-c-format
msgid ""
"Many people got confused by these primary key based one to one associations. "
"They can only be lazily loaded if Hibernate knows that the other side of the "
"association is always present. To indicate to Hibernate that it is the case, "
"use <classname>@OneToOne(optional=false)."
msgstr ""
#. Tag: para
#: basic_mapping.xml:3388
#, no-c-format
msgid "In hbm.xml, use the following mapping."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:3413
#, fuzzy, no-c-format
msgid ""
"<one-to-one\n"
" name=\"propertyName\"\n"
" class=\"ClassName\"\n"
" cascade=\"cascade_style\"\n"
" constrained=\"true|false\"\n"
" fetch=\"join|select\"\n"
" property-ref=\"propertyNameFromAssociatedClass\"\n"
" access=\"field|property|ClassName\"\n"
" formula=\"any SQL expression\"\n"
" lazy=\"proxy|no-proxy|false\"\n"
" entity-name=\"EntityName\"\n"
" node=\"element-name|@attribute-name|element/@attribute|.\"\n"
" embed-xml=\"true|false\"\n"
" foreign-key=\"foreign_key_name\"\n"
"/>"
msgstr ""
"<one-to-one\n"
" name=\"propertyName\"\n"
" class=\"ClassName\"\n"
" cascade=\"cascade_style\"\n"
" constrained=\"true|false\"\n"
" fetch=\"join|select\"\n"
" property-ref=\"propertyNameFromAssociatedClass\"\n"
" access=\"field|property|ClassName\"\n"
" formula=\"any SQL expression\"\n"
" lazy=\"proxy|no-proxy|false\"\n"
" entity-name=\"EntityName\"\n"
" node=\"element-name|@attribute-name|element/@attribute|.\"\n"
" embed-xml=\"true|false\"\n"
" foreign-key=\"foreign_key_name\"\n"
"/>"
#. Tag: para
#: basic_mapping.xml:3433
#, no-c-format
msgid ""
"<literal>constrained (optional): specifies that a foreign key "
"constraint on the primary key of the mapped table and references the table "
"of the associated class. This option affects the order in which <literal>save"
"()</literal> and delete() are cascaded, and determines "
"whether the association can be proxied. It is also used by the schema export "
"tool."
msgstr ""
"<literal>constrained(约æŸï¼‰ï¼ˆå¯é€‰ï¼‰è¡¨æ˜Žè¯¥ç±»å¯¹åº”的表对应的数æ®åº“"
"表,和被关è”的对象所对应的数æ®åº“表之间,通过一个外键引用对主键进行约æŸã€‚这个"
"é€‰é¡¹å½±å“ <literal>save() å’Œ delete() 在级è”执行"
"时的先åŽé¡ºåºä»¥åŠå†³å®šè¯¥å…³è”能å¦è¢«å§”托(也在 schema export tool ä¸è¢«ä½¿ç”¨ï¼‰ã€‚ "
#. Tag: para
#: basic_mapping.xml:3449
#, no-c-format
msgid ""
"<literal>property-ref (optional): the name of a property of the "
"associated class that is joined to the primary key of this class. If not "
"specified, the primary key of the associated class is used."
msgstr ""
"<literal>property-ref:(å¯é€‰ï¼‰æŒ‡å®šå…³è”类的属性å,这个属性将会和本"
"类的主键相对应。如果没有指定,会使用对方关è”类的主键。 "
#. Tag: para
#: basic_mapping.xml:3462
#, no-c-format
msgid ""
"<literal>formula (optional): almost all one-to-one associations "
"map to the primary key of the owning entity. If this is not the case, you "
"can specify another column, columns or expression to join on using an SQL "
"formula. See <literal>org.hibernate.test.onetooneformula for an "
"example."
msgstr ""
"<literal>formula (å¯é€‰ï¼‰ï¼šç»å¤§å¤šæ•°ä¸€å¯¹ä¸€çš„å…³è”都指å‘其实体的主键。"
"在一些少è§çš„情况ä¸ï¼Œä½ å¯èƒ½ä¼šæŒ‡å‘其他的一个或多个å—段,或者是一个表达å¼ï¼Œè¿™äº›"
"æƒ…å†µä¸‹ï¼Œä½ å¯ä»¥ç”¨ä¸€ä¸ª SQL å…¬å¼æ¥è¡¨ç¤ºã€‚(å¯ä»¥åœ¨ org.hibernate.test."
"onetooneformula 找到例å) "
#. Tag: para
#: basic_mapping.xml:3471
#, no-c-format
msgid ""
"<literal>lazy (optional - defaults to proxy ): "
"by default, single point associations are proxied. <literal>lazy=\"no-proxy"
"\"</literal> specifies that the property should be fetched lazily when the "
"instance variable is first accessed. It requires build-time bytecode "
"instrumentation. <literal>lazy=\"false\" specifies that the "
"association will always be eagerly fetched. <emphasis>Note that if "
"<literal>constrained=\"false\", proxying is impossible and "
"Hibernate will eagerly fetch the association</emphasis>."
msgstr ""
"<literal>lazy(å¯é€‰ — 默认为 proxy ):默认情况"
"下,å•ç‚¹å…³è”是ç»è¿‡ä»£ç†çš„。<literal>lazy=\"no-proxy\"指定æ¤å±žæ€§åº”该"
"在实例å˜é‡ç¬¬ä¸€æ¬¡è¢«è®¿é—®æ—¶åº”该延迟抓å–(fetche lazily)(需è¦è¿è¡Œæ—¶å—节ç 的增"
"强)。 <literal>lazy=\"false\"指定æ¤å…³è”总是被预先抓å–。"
"注æ„,如果<literal>constrained=\"false\", ä¸å¯èƒ½ä½¿ç”¨ä»£ç†ï¼ŒHibernate"
"会采å–预先抓å–</emphasis>。"
#. Tag: para
#: basic_mapping.xml:3490
#, no-c-format
msgid ""
"Primary key associations do not need an extra table column. If two rows are "
"related by the association, then the two table rows share the same primary "
"key value. To relate two objects by a primary key association, ensure that "
"they are assigned the same identifier value."
msgstr ""
"主键关è”ä¸éœ€è¦é¢å¤–的表å—段;如果两行是通过这ç§ä¸€å¯¹ä¸€å…³ç³»ç›¸å…³è”的,那么这两行"
"就共享åŒæ ·çš„主关键å—å€¼ã€‚æ‰€ä»¥å¦‚æžœä½ å¸Œæœ›ä¸¤ä¸ªå¯¹è±¡é€šè¿‡ä¸»é”®ä¸€å¯¹ä¸€å…³è”ï¼Œä½ å¿…é¡»ç¡®è®¤"
"它们被赋予åŒæ ·çš„æ ‡è¯†å€¼ã€‚"
#. Tag: para
#: basic_mapping.xml:3496
#, no-c-format
msgid ""
"For a primary key association, add the following mappings to "
"<literal>Employee and Person respectively:"
msgstr ""
"比如说,对下é¢çš„ <literal>Employee å’Œ Person è¿›"
"行主键一对一关è”:"
#. Tag: programlisting
#: basic_mapping.xml:3500
#, fuzzy, no-c-format
msgid "<one-to-one name=\"person\" class=\"Person\"/>"
msgstr "<one-to-one name=\"person\" class=\"Person\"/>"
#. Tag: programlisting
#: basic_mapping.xml:3502
#, fuzzy, no-c-format
msgid ""
"<one-to-one name=\"employee\" class=\"Employee\" constrained=\"true\"/>"
msgstr ""
"<one-to-one name=\"employee\" class=\"Employee\" constrained=\"true\"/>"
#. Tag: para
#: basic_mapping.xml:3504
#, no-c-format
msgid ""
"Ensure that the primary keys of the related rows in the PERSON and EMPLOYEE "
"tables are equal. You use a special Hibernate identifier generation strategy "
"called <literal>foreign:"
msgstr ""
"çŽ°åœ¨æˆ‘ä»¬å¿…é¡»ç¡®ä¿ PERSON å’Œ EMPLOYEE ä¸ç›¸å…³çš„å—段是相ç‰çš„。我们使用一个被æˆä¸º "
"<literal>foreign 的特殊的 hibernate æ ‡è¯†ç¬¦ç”Ÿæˆç–略: "
#. Tag: programlisting
#: basic_mapping.xml:3508
#, fuzzy, no-c-format
msgid ""
"<class name=\"person\" table=\"PERSON\">\n"
" <id name=\"id\" column=\"PERSON_ID\">\n"
" <generator class=\"foreign\">\n"
" <param name=\"property\">employee</param>\n"
" </generator>\n"
" </id>\n"
" ...\n"
" <one-to-one name=\"employee\"\n"
" class=\"Employee\"\n"
" constrained=\"true\"/>\n"
"</class>"
msgstr ""
"<class name=\"person\" table=\"PERSON\">\n"
" <id name=\"id\" column=\"PERSON_ID\">\n"
" <generator class=\"foreign\">\n"
" <param name=\"property\">employee</param>\n"
" </generator>\n"
" </id>\n"
" ...\n"
" <one-to-one name=\"employee\"\n"
" class=\"Employee\"\n"
" constrained=\"true\"/>\n"
"</class>"
#. Tag: para
#: basic_mapping.xml:3510
#, no-c-format
msgid ""
"A newly saved instance of <literal>Person is assigned the same "
"primary key value as the <literal>Employee instance referred with "
"the <literal>employee property of that Person ."
msgstr ""
"一个刚刚ä¿å˜çš„ <literal>Person 实例被赋予和该 Personemployee 属性所指å‘çš„ Employee<natural-id> "
"element. Hibernate will generate the necessary unique key and nullability "
"constraints and, as a result, your mapping will be more self-documenting."
msgstr ""
"我们建议使用代用键(键值ä¸å…·å¤‡å®žé™…æ„义)作为主键,我们ä»ç„¶åº”该å°è¯•ä¸ºæ‰€æœ‰çš„实"
"ä½“é‡‡ç”¨è‡ªç„¶çš„é”®å€¼ä½œä¸ºï¼ˆé™„åŠ â€”â€”è¯‘è€…æ³¨ï¼‰æ ‡ç¤ºã€‚è‡ªç„¶é”®ï¼ˆnatural key)是å•ä¸ªæˆ–组åˆå±ž"
"性,他们必须唯一且éžç©ºã€‚如果它还是ä¸å¯å˜çš„那就更ç†æƒ³äº†ã€‚在 <literal><"
"natural-id></literal> å…ƒç´ ä¸åˆ—出自然键的属性。Hibernate ä¼šå¸®ä½ ç”Ÿæˆå¿…须的唯"
"一键值和éžç©ºçº¦æŸï¼Œä½ çš„æ˜ å°„ä¼šæ›´åŠ çš„æ˜Žæ˜¾æ˜“æ‡‚ï¼ˆåŽŸæ–‡æ˜¯ self-documenting,自我注"
"解)。 "
#. Tag: programlisting
#: basic_mapping.xml:3529
#, no-c-format
msgid ""
"@Entity\n"
"public class Citizen {\n"
" @Id\n"
" @GeneratedValue\n"
" private Integer id;\n"
" private String firstname;\n"
" private String lastname;\n"
" \n"
" @NaturalId\n"
" @ManyToOne\n"
" private State state;\n"
"\n"
" @NaturalId\n"
" private String ssn;\n"
" ...\n"
"}\n"
"\n"
"\n"
"\n"
"//and later on query\n"
"List results = s.createCriteria( Citizen.class )\n"
" .add( Restrictions.naturalId().set( \"ssn\", \"1234\" ).set"
"( \"state\", ste ) )\n"
" .list();"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3531
#, no-c-format
msgid "Or in XML,"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:3533
#, fuzzy, no-c-format
msgid ""
"<natural-id mutable=\"true|false\"/>\n"
" <property ... />\n"
" <many-to-one ... />\n"
" ......\n"
"</natural-id>"
msgstr ""
"<natural-id mutable=\"true|false\"/>\n"
" <property ... />\n"
" <many-to-one ... />\n"
" ......\n"
"</natural-id>"
#. Tag: para
#: basic_mapping.xml:3535
#, no-c-format
msgid ""
"It is recommended that you implement <literal>equals() and "
"<literal>hashCode() to compare the natural key properties of the "
"entity."
msgstr ""
"æˆ‘ä»¬å¼ºçƒˆå»ºè®®ä½ å®žçŽ° <literal>equals() å’Œ hashCode() (optional - defaults to false(å¯é€‰ï¼Œé»˜è®¤ä¸º false ):默认情况"
"ä¸‹ï¼Œè‡ªç„¶æ ‡è¯†å±žæ€§è¢«å‡å®šä¸ºä¸å¯å˜çš„(常é‡ï¼‰ã€‚ "
#. Tag: title
#: basic_mapping.xml:3552
#, fuzzy, no-c-format
msgid "<title>Any"
msgstr "<title>any"
#. Tag: para
#: basic_mapping.xml:3554
#, fuzzy, no-c-format
msgid ""
"There is one more type of property mapping. The <classname>@Any "
"mapping defines a polymorphic association to classes from multiple tables. "
"This type of mapping requires more than one column. The first column "
"contains the type of the associated entity. The remaining columns contain "
"the identifier. It is impossible to specify a foreign key constraint for "
"this kind of association. This is not the usual way of mapping polymorphic "
"associations and you should use this only in special cases. For example, for "
"audit logs, user session data, etc."
msgstr ""
"è¿™æ˜¯å±žæ€§æ˜ å°„çš„åˆä¸€ç§ç±»åž‹ã€‚<literal><any> æ˜ å°„å…ƒç´ å®šä¹‰äº†ä¸€ç§ä»Ž"
"多个表到类的多æ€å…³è”。这ç§ç±»åž‹çš„æ˜ å°„å¸¸å¸¸éœ€è¦å¤šäºŽä¸€ä¸ªå—段。第一个å—段æŒæœ‰è¢«å…³"
"è”实体的类型,其他的å—段æŒæœ‰æ ‡è¯†ç¬¦ã€‚对这ç§ç±»åž‹çš„å…³è”æ¥è¯´ï¼Œä¸å¯èƒ½æŒ‡å®šä¸€ä¸ªå¤–é”®"
"约æŸï¼Œæ‰€ä»¥è¿™å½“然ä¸æ˜¯æ˜ 射(多æ€ï¼‰å…³è”的通常的方å¼ã€‚ä½ åªåº”该在éžå¸¸ç‰¹æ®Šçš„情况下"
"使用它(比如,审计 log,用户会è¯æ•°æ®ç‰ç‰)。 "
#. Tag: para
#: basic_mapping.xml:3564
#, fuzzy, no-c-format
msgid ""
"The <classname>@Any annotation describes the column holding the "
"metadata information. To link the value of the metadata information and an "
"actual entity type, The <classname>@AnyDef and "
"<classname>@AnyDefs annotations are used. The metaType. You must specify the "
"mapping from values of the <literal>metaType to class names."
msgstr ""
"<literal>meta-type 属性使得应用程åºèƒ½æŒ‡å®šä¸€ä¸ªå°†æ•°æ®åº“å—æ®µçš„å€¼æ˜ å°„åˆ°"
"æŒä¹…化类的自定义类型。这个æŒä¹…化类包å«æœ‰ç”¨ <literal>id-type 指定的"
"æ ‡è¯†ç¬¦å±žæ€§ã€‚ä½ å¿…é¡»æŒ‡å®šä»Ž meta-type 的值到类åçš„æ˜ å°„ã€‚ "
#. Tag: programlisting
#: basic_mapping.xml:3574
#, no-c-format
msgid ""
"@Any( metaColumn = @Column( name = \"property_type\" ), fetch=FetchType."
"EAGER )\n"
"@AnyMetaDef( \n"
" idType = \"integer\", \n"
" metaType = \"string\", \n"
" metaValues = {\n"
" @MetaValue( value = \"S\", targetEntity = StringProperty.class ),\n"
" @MetaValue( value = \"I\", targetEntity = IntegerProperty.class )\n"
" } )\n"
"@JoinColumn( name = \"property_id\" )\n"
"public Property getMainProperty() {\n"
" return mainProperty;\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3576
#, no-c-format
msgid ""
"Note that <classname>@AnyDef can be mutualized and reused. It is "
"recommended to place it as a package metadata in this case."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:3580
#, no-c-format
msgid ""
"//on a package\n"
"@AnyMetaDef( name=\"property\" \n"
" idType = \"integer\", \n"
" metaType = \"string\", \n"
" metaValues = {\n"
" @MetaValue( value = \"S\", targetEntity = StringProperty.class ),\n"
" @MetaValue( value = \"I\", targetEntity = IntegerProperty.class )\n"
" } )\n"
"package org.hibernate.test.annotations.any;\n"
"\n"
"\n"
"//in a class\n"
" @Any( metaDef=\"property\", metaColumn = @Column( name = \"property_type"
"\" ), fetch=FetchType.EAGER )\n"
" @JoinColumn( name = \"property_id\" )\n"
" public Property getMainProperty() {\n"
" return mainProperty;\n"
" }"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3582
#, no-c-format
msgid "The hbm.xml equivalent is:"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:3584
#, fuzzy, no-c-format
msgid ""
"<any name=\"being\" id-type=\"long\" meta-type=\"string\">\n"
" <meta-value value=\"TBL_ANIMAL\" class=\"Animal\"/>\n"
" <meta-value value=\"TBL_HUMAN\" class=\"Human\"/>\n"
" <meta-value value=\"TBL_ALIEN\" class=\"Alien\"/>\n"
" <column name=\"table_name\"/>\n"
" <column name=\"id\"/>\n"
"</any>"
msgstr ""
"<any name=\"being\" id-type=\"long\" meta-type=\"string\">\n"
" <meta-value value=\"TBL_ANIMAL\" class=\"Animal\"/>\n"
" <meta-value value=\"TBL_HUMAN\" class=\"Human\"/>\n"
" <meta-value value=\"TBL_ALIEN\" class=\"Alien\"/>\n"
" <column name=\"table_name\"/>\n"
" <column name=\"id\"/>\n"
"</any>"
#. Tag: para
#: basic_mapping.xml:3587
#, no-c-format
msgid "You cannot mutualize the metadata in hbm.xml as you can in annotations."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:3606
#, fuzzy, no-c-format
msgid ""
"<any\n"
" name=\"propertyName\"\n"
" id-type=\"idtypename\"\n"
" meta-type=\"metatypename\"\n"
" cascade=\"cascade_style\"\n"
" access=\"field|property|ClassName\"\n"
" optimistic-lock=\"true|false\"\n"
">\n"
" <meta-value ... />\n"
" <meta-value ... />\n"
" .....\n"
" <column .... />\n"
" <column .... />\n"
" .....\n"
"</any>"
msgstr ""
"<any\n"
" name=\"propertyName\"\n"
" id-type=\"idtypename\"\n"
" meta-type=\"metatypename\"\n"
" cascade=\"cascade_style\"\n"
" access=\"field|property|ClassName\"\n"
" optimistic-lock=\"true|false\"\n"
">\n"
" <meta-value ... />\n"
" <meta-value ... />\n"
" .....\n"
" <column .... />\n"
" <column .... />\n"
" .....\n"
"</any>"
#. Tag: para
#: basic_mapping.xml:3610
#, no-c-format
msgid "<literal>name: the property name."
msgstr "<literal>name:属性å"
#. Tag: para
#: basic_mapping.xml:3614
#, no-c-format
msgid "<literal>id-type: the identifier type."
msgstr "<literal>id-typeï¼šæ ‡è¯†ç¬¦ç±»åž‹"
#. Tag: para
#: basic_mapping.xml:3618
#, no-c-format
msgid ""
"<literal>meta-type (optional - defaults to string(å¯é€‰ -默认是 string ):å…许"
"è¾¨åˆ«æ ‡å¿—(discriminator)æ˜ å°„çš„ä»»ä½•ç±»åž‹ã€‚ "
#. Tag: para
#: basic_mapping.xml:3624
#, no-c-format
msgid ""
"<literal>cascade (optional- defaults to none ): "
"the cascade style."
msgstr ""
"<literal>cascade(å¯é€‰ — 默认是none ):级è”çš„ç±»"
"型。"
#. Tag: para
#: basic_mapping.xml:3635
#, no-c-format
msgid ""
"<literal>optimistic-lock (optional - defaults to true(å¯é€‰ — 默认是 true ):"
"表明更新æ¤ç»„件是å¦éœ€è¦èŽ·å–ä¹è§‚é”。æ¢å¥è¯è¯´ï¼Œå½“这个属性å˜è„时,是å¦å¢žåŠ 版本å·"
"(Version)。"
#. Tag: title
#: basic_mapping.xml:3646
#, no-c-format
msgid "Properties"
msgstr "属性(Properties)"
#. Tag: para
#: basic_mapping.xml:3648
#, no-c-format
msgid ""
"The <literal><properties> element allows the definition of a "
"named, logical grouping of the properties of a class. The most important use "
"of the construct is that it allows a combination of properties to be the "
"target of a <literal>property-ref. It is also a convenient way to "
"define a multi-column unique constraint. For example:"
msgstr ""
"<literal><properties> å…ƒç´ å…许定义一个命å的逻辑分组"
"(grouping)包å«ä¸€ä¸ªç±»ä¸çš„å¤šä¸ªå±žæ€§ã€‚è¿™ä¸ªå…ƒç´ æœ€é‡è¦çš„用处是å…许多个属性的组åˆ"
"作为 <literal>property-ref çš„ç›®æ ‡ï¼ˆtarget)。这也是定义多å—段唯一约"
"æŸçš„一ç§æ–¹ä¾¿é€”径。例如:"
#. Tag: programlisting
#: basic_mapping.xml:3668
#, fuzzy, no-c-format
msgid ""
"<properties\n"
" name=\"logicalName\"\n"
" insert=\"true|false\"\n"
" update=\"true|false\"\n"
" optimistic-lock=\"true|false\"\n"
" unique=\"true|false\"\n"
">\n"
"\n"
" <property ...../>\n"
" <many-to-one .... />\n"
" ........\n"
"</properties>"
msgstr ""
"<properties \n"
" name=\"logicalName\" \n"
" insert=\"true|false\"\n"
" update=\"true|false\"\n"
" optimistic-lock=\"true|false\"\n"
" unique=\"true|false\"\n"
">\n"
" \n"
" <property ...../>\n"
" <many-to-one .... />\n"
" ........\n"
"</properties>"
#. Tag: para
#: basic_mapping.xml:3672
#, no-c-format
msgid ""
"<literal>name: the logical name of the grouping. It is "
"<emphasis>not an actual property name."
msgstr ""
"<literal>name:分组的逻辑å称 — ä¸æ˜¯ 实际属性"
"çš„å称。 "
#. Tag: para
#: basic_mapping.xml:3687
#, no-c-format
msgid ""
"<literal>optimistic-lock (optional - defaults to true(å¯é€‰ — 默认是 true ):"
"表明更新æ¤ç»„件是å¦éœ€è¦èŽ·å–ä¹è§‚é”。æ¢å¥è¯è¯´ï¼Œå½“这个属性å˜è„时,是å¦å¢žåŠ 版本å·"
"(Version)。"
#. Tag: para
#: basic_mapping.xml:3702
#, no-c-format
msgid ""
"For example, if we have the following <literal><properties> "
"mapping:"
msgstr "例如,如果我们有如下的 <literal><properties> æ˜ å°„ï¼š"
#. Tag: programlisting
#: basic_mapping.xml:3705
#, fuzzy, no-c-format
msgid ""
"<class name=\"Person\">\n"
" <id name=\"personNumber\"/>\n"
"\n"
" ...\n"
" <properties name=\"name\"\n"
" unique=\"true\" update=\"false\">\n"
" <property name=\"firstName\"/>\n"
" <property name=\"initial\"/>\n"
" <property name=\"lastName\"/>\n"
" </properties>\n"
"</class>"
msgstr ""
"<class name=\"Person\">\n"
" <id name=\"personNumber\"/>\n"
" ...\n"
" <properties name=\"name\" \n"
" unique=\"true\" update=\"false\">\n"
" <property name=\"firstName\"/>\n"
" <property name=\"initial\"/>\n"
" <property name=\"lastName\"/>\n"
" </properties>\n"
"</class>"
#. Tag: para
#: basic_mapping.xml:3707
#, no-c-format
msgid ""
"You might have some legacy data association that refers to this unique key "
"of the <literal>Person table, instead of to the primary key:"
msgstr ""
"然åŽï¼Œæˆ‘们å¯èƒ½æœ‰ä¸€äº›é—留的数æ®å…³è”,引用 <literal>Person 表的这个唯"
"一键,而ä¸æ˜¯ä¸»é”®ï¼š"
#. Tag: programlisting
#: basic_mapping.xml:3711
#, fuzzy, no-c-format
msgid ""
"<many-to-one name=\"owner\"\n"
" class=\"Person\" property-ref=\"name\">\n"
" <column name=\"firstName\"/>\n"
" <column name=\"initial\"/>\n"
" <column name=\"lastName\"/>\n"
"</many-to-one>"
msgstr ""
"<many-to-one name=\"person\" \n"
" class=\"Person\" property-ref=\"name\">\n"
" <column name=\"firstName\"/>\n"
" <column name=\"initial\"/>\n"
" <column name=\"lastName\"/>\n"
"</many-to-one>"
#. Tag: para
#: basic_mapping.xml:3714
#, no-c-format
msgid ""
"When using annotations as a mapping strategy, such construct is not "
"necessary as the binding between a column and its related column on the "
"associated table is done directly"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3721
#, no-c-format
msgid ""
"The use of this outside the context of mapping legacy data is not "
"recommended."
msgstr "我们并ä¸æŽ¨èè¿™æ ·ä½¿ç”¨ï¼Œé™¤éžåœ¨æ˜ å°„é—留数æ®çš„情况下。 "
#. Tag: title
#: basic_mapping.xml:3726
#, no-c-format
msgid "Some hbm.xml specificities"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3728
#, no-c-format
msgid ""
"The hbm.xml structure has some specificities naturally not present when "
"using annotations, let's describe them briefly."
msgstr ""
#. Tag: title
#: basic_mapping.xml:3732
#, no-c-format
msgid "Doctype"
msgstr "Doctype"
#. Tag: para
#: basic_mapping.xml:3734
#, no-c-format
msgid ""
"All XML mappings should declare the doctype shown. The actual DTD can be "
"found at the URL above, in the directory <literal>hibernate-x.x.x/src/org/"
"hibernate </literal>, or in hibernate3.jar . Hibernate "
"will always look for the DTD in its classpath first. If you experience "
"lookups of the DTD using an Internet connection, check the DTD declaration "
"against the contents of your classpath."
msgstr ""
"所有的 XML æ˜ å°„éƒ½éœ€è¦å®šä¹‰å¦‚上所示的 doctype。DTD å¯ä»¥ä»Žä¸Šè¿° URL ä¸èŽ·å–,也å¯"
"以从 <literal>hibernate-x.x.x/src/org/hibernate 目录ä¸ã€æˆ– "
"<literal>hibernate.jar 文件ä¸æ‰¾åˆ°ã€‚Hibernate 总是会首先在它的 "
"classptah ä¸æœç´¢ DTD æ–‡ä»¶ã€‚å¦‚æžœä½ å‘现它是通过连接 Internet 查找 DTD 文件,就"
"å¯¹ç…§ä½ çš„ classpath 目录检查 XML 文件里的 DTD 声明。"
#. Tag: title
#: basic_mapping.xml:3743
#, no-c-format
msgid "EntityResolver"
msgstr "EntityResolver"
#. Tag: para
#: basic_mapping.xml:3745
#, no-c-format
msgid ""
"Hibernate will first attempt to resolve DTDs in its classpath. It does this "
"is by registering a custom <literal>org.xml.sax.EntityResolver "
"implementation with the SAXReader it uses to read in the xml files. This "
"custom <literal>EntityResolver recognizes two different systemId "
"namespaces:"
msgstr ""
"Hibernate 首先试图在其 classpath ä¸è§£æž DTD。这是ä¾é 在系统ä¸æ³¨å†Œçš„ "
"<literal>org.xml.sax.EntityResolver 的一个具体实现,SAXReader ä¾é "
"它æ¥è¯»å– xml 文件。这个自定义的 <literal>EntityResolver 能辨认两ç§"
"ä¸åŒçš„ systenId 命å空间:"
#. Tag: para
#: basic_mapping.xml:3754
#, fuzzy, no-c-format
msgid ""
"a <literal>hibernate namespace is recognized whenever the resolver "
"encounters a systemId starting with <literal>http://www.hibernate.org/dtd/hibernate namespace is recognized whenever the resolver "
"encounters a systemId using a <literal>classpath:// URL protocol. "
"The resolver will attempt to resolve these entities via (1) the current "
"thread context classloader and (2) the classloader which loaded the "
"Hibernate classes."
msgstr ""
"è‹¥ resolver é‡åˆ°äº†ä¸€ä¸ªä½¿ç”¨ <literal>classpath:// URL å议的 "
"systemId,它会辨认出这是 <literal>user namespace,resolver 试图通过"
"(1) 当å‰çº¿ç¨‹ä¸Šä¸‹æ–‡çš„ classloader 和(2) åŠ è½½ Hibernate class çš„ classloader "
"æ¥æŸ¥æ‰¾è¿™äº›å®žä½“。"
#. Tag: para
#: basic_mapping.xml:3771
#, no-c-format
msgid "The following is an example of utilizing user namespacing:"
msgstr "下é¢æ˜¯ä¸€ä¸ªä½¿ç”¨ç”¨æˆ·å‘½å空间(user namespace)的例å:"
#. Tag: programlisting
#: basic_mapping.xml:3774
#, no-c-format
msgid ""
"<xi:include href=\"../extras/namespacing.xml_sample\" parse=\"text\"\n"
" xmlns:xi=\"http://www.w3.org/2001/XInclude\" />"
msgstr ""
#. Tag: para
#: basic_mapping.xml:3776
#, no-c-format
msgid ""
"Where <literal>types.xml is a resource in the your."
"domain</literal> package and contains a custom ."
msgstr ""
"这里的 <literal>types.xml 是 your.domain 包ä¸çš„"
"一个资æºï¼Œå®ƒåŒ…å«äº†ä¸€ä¸ªè‡ªå®šä¹‰çš„ <link linkend=\"mapping-types-custom"
"\">typedef</link>。 "
#. Tag: title
#: basic_mapping.xml:3783
#, no-c-format
msgid "Hibernate-mapping"
msgstr "Hibernate-mapping"
#. Tag: para
#: basic_mapping.xml:3785
#, no-c-format
msgid ""
"This element has several optional attributes. The <literal>schema "
"and <literal>catalog attributes specify that tables referred to in "
"this mapping belong to the named schema and/or catalog. If they are "
"specified, tablenames will be qualified by the given schema and catalog "
"names. If they are missing, tablenames will be unqualified. The "
"<literal>default-cascade attribute specifies what cascade style "
"should be assumed for properties and collections that do not specify a "
"<literal>cascade attribute. By default, the auto-import å’Œ catalogcascade 属性的 Java 属性和 集åˆ"
"ç±» Hibernate 会采å–ä»€ä¹ˆæ ·çš„é»˜è®¤çº§è”é£Žæ ¼ã€‚<literal>auto-import 属性"
"默认让我们在查询è¯è¨€ä¸å¯ä»¥ä½¿ç”¨éžå…¨é™å®šåçš„ç±»å。"
#. Tag: programlisting
#: basic_mapping.xml:3814
#, fuzzy, no-c-format
msgid ""
"<hibernate-mapping\n"
" schema=\"schemaName\"\n"
" catalog=\"catalogName\"\n"
" default-cascade=\"cascade_style\"\n"
" default-access=\"field|property|ClassName\"\n"
" default-lazy=\"true|false\"\n"
" auto-import=\"true|false\"\n"
" package=\"package.name\"\n"
" />"
msgstr ""
"<![CDATA["
#. Tag: para
#: basic_mapping.xml:3818
#, no-c-format
msgid "<literal>schema (optional): the name of a database schema."
msgstr "<literal>schema(å¯é€‰ï¼‰ï¼šæ•°æ®åº“ schema çš„å称。"
#. Tag: para
#: basic_mapping.xml:3823
#, no-c-format
msgid "<literal>catalog (optional): the name of a database catalog."
msgstr "<literal>catalog(å¯é€‰ï¼‰ï¼šæ•°æ®åº“ catalog çš„å称。 "
#. Tag: para
#: basic_mapping.xml:3828
#, no-c-format
msgid ""
"<literal>default-cascade (optional - defaults to none(å¯é€‰ — 默认为 none ):"
"默认的级è”é£Žæ ¼ã€‚ "
#. Tag: para
#: basic_mapping.xml:3833
#, no-c-format
msgid ""
"<literal>default-access (optional - defaults to property."
msgstr ""
"<literal>default-access (å¯é€‰ — 默认为 property 接å£è‡ªå®šä¹‰ã€‚ "
#. Tag: para
#: basic_mapping.xml:3840
#, no-c-format
msgid ""
"<literal>default-lazy (optional - defaults to truelazy "
"attributes of class and collection mappings."
msgstr ""
"<literal>default-lazy(å¯é€‰ — 默认为 true ):指"
"定了未明确注明 <literal>lazy 属性的 Java 属性和集åˆç±»ï¼ŒHibernate 会"
"采å–ä»€ä¹ˆæ ·çš„é»˜è®¤åŠ è½½é£Žæ ¼ã€‚ "
#. Tag: para
#: basic_mapping.xml:3847
#, no-c-format
msgid ""
"<literal>auto-import (optional - defaults to true(å¯é€‰ — 默认为 true ):指定"
"我们是å¦å¯ä»¥åœ¨æŸ¥è¯¢è¯è¨€ä¸ä½¿ç”¨éžå…¨é™å®šçš„ç±»å(仅é™äºŽæœ¬æ˜ 射文件ä¸çš„类)。 "
#. Tag: para
#: basic_mapping.xml:3854
#, no-c-format
msgid ""
"<literal>package (optional): specifies a package prefix to use for "
"unqualified class names in the mapping document."
msgstr ""
"<literal>package(å¯é€‰ï¼‰ï¼šæŒ‡å®šä¸€ä¸ªåŒ…å‰ç¼€ï¼Œå¦‚æžœåœ¨æ˜ å°„æ–‡æ¡£ä¸æ²¡æœ‰æŒ‡å®š"
"å…¨é™å®šçš„ç±»å,就使用这个作为包å。 "
#. Tag: para
#: basic_mapping.xml:3861
#, no-c-format
msgid ""
"If you have two persistent classes with the same unqualified name, you "
"should set <literal>auto-import=\"false\". An exception will "
"result if you attempt to assign two classes to the same \"imported\" name."
msgstr ""
"å‡è‹¥ä½ 有两个æŒä¹…化类,它们的éžå…¨é™å®šåæ˜¯ä¸€æ ·çš„ï¼ˆå°±æ˜¯ä¸¤ä¸ªç±»çš„åå—ä¸€æ ·ï¼Œæ‰€åœ¨çš„"
"包ä¸ä¸€æ · — è¯‘è€…æ³¨ï¼‰ï¼Œä½ åº”è¯¥è®¾ç½® <literal>auto-import=\"false\"。如"
"æžœä½ æŠŠä¸€ä¸ªâ€œå¯¼å…¥è¿‡â€çš„åå—åŒæ—¶å¯¹åº”两个类,Hibernate 会抛出一个异常。"
#. Tag: para
#: basic_mapping.xml:3866
#, no-c-format
msgid ""
"The <literal>hibernate-mapping element allows you to nest several "
"persistent <literal><class> mappings, as shown above. It is, "
"however, good practice (and expected by some tools) to map only a single "
"persistent class, or a single class hierarchy, in one mapping file and name "
"it after the persistent superclass. For example, <literal>Cat.hbm.xmlDog.hbm.xml, or if using inheritance, "
"<literal>Animal.hbm.xml."
msgstr ""
"æ³¨æ„ <literal>hibernate-mapping å…ƒç´ å…è®¸ä½ åµŒå¥—å¤šä¸ªå¦‚ä¸Šæ‰€ç¤ºçš„ "
"<literal><class> æ˜ å°„ã€‚ä½†æ˜¯æœ€å¥½çš„åšæ³•ï¼ˆä¹Ÿè®¸ä¸€äº›å·¥å…·éœ€è¦çš„)是"
"一个æŒä¹…åŒ–ç±»ï¼ˆæˆ–ä¸€ä¸ªç±»çš„ç»§æ‰¿å±‚æ¬¡ï¼‰å¯¹åº”ä¸€ä¸ªæ˜ å°„æ–‡ä»¶ï¼Œå¹¶ä»¥æŒä¹…化的超类å称命"
"å,例如:<literal>Cat.hbm.xmlã€Dog.hbm.xml ,或"
"者如果使用继承,<literal>Animal.hbm.xml。"
#. Tag: title
#: basic_mapping.xml:3877
#, fuzzy, no-c-format
msgid "<title>Key"
msgstr "<title>键(key)"
#. Tag: para
#: basic_mapping.xml:3879
#, fuzzy, no-c-format
msgid ""
"The <literal><key> element is featured a few times within "
"this guide. It appears anywhere the parent mapping element defines a join to "
"a new table that references the primary key of the original table. It also "
"defines the foreign key in the joined table:"
msgstr ""
"我们目å‰å·²ç»è§åˆ°è¿‡ <literal><key> å…ƒç´ å¤šæ¬¡äº†ã€‚è¿™ä¸ªå…ƒç´ åœ¨çˆ¶æ˜ "
"å°„å…ƒç´ å®šä¹‰äº†å¯¹æ–°è¡¨çš„è¿žæŽ¥ï¼Œå¹¶ä¸”åœ¨è¢«è¿žæŽ¥è¡¨ä¸å®šä¹‰äº†ä¸€ä¸ªå¤–键引用原表的主键的情况"
"下ç»å¸¸ä½¿ç”¨ã€‚ "
#. Tag: programlisting
#: basic_mapping.xml:3900
#, fuzzy, no-c-format
msgid ""
"<key\n"
" column=\"columnname\"\n"
" on-delete=\"noaction|cascade\"\n"
" property-ref=\"propertyName\"\n"
" not-null=\"true|false\"\n"
" update=\"true|false\"\n"
" unique=\"true|false\"\n"
"/>"
msgstr ""
"<key\n"
" column=\"columnname\"\n"
" on-delete=\"noaction|cascade\"\n"
" property-ref=\"propertyName\"\n"
" not-null=\"true|false\"\n"
" update=\"true|false\"\n"
" unique=\"true|false\"\n"
"/>"
#. Tag: para
#: basic_mapping.xml:3910
#, no-c-format
msgid ""
"<literal>on-delete (optional - defaults to noaction(å¯é€‰ï¼Œé»˜è®¤æ˜¯ noaction ):表"
"明外键关è”是å¦æ‰“开数æ®åº“级别的级è”åˆ é™¤ã€‚ "
#. Tag: para
#: basic_mapping.xml:3916
#, no-c-format
msgid ""
"<literal>property-ref (optional): specifies that the foreign key "
"refers to columns that are not the primary key of the original table. It is "
"provided for legacy data."
msgstr ""
"<literal>property-ref(å¯é€‰ï¼‰ï¼šè¡¨æ˜Žå¤–键引用的å—段ä¸æ˜¯åŽŸè¡¨çš„主键(æ"
"供给é—留数æ®ï¼‰ã€‚ "
#. Tag: para
#: basic_mapping.xml:3922
#, no-c-format
msgid ""
"<literal>not-null (optional): specifies that the foreign key "
"columns are not nullable. This is implied whenever the foreign key is also "
"part of the primary key."
msgstr ""
"<literal>not-null(å¯é€‰ï¼‰ï¼šè¡¨æ˜Žå¤–键的å—段ä¸å¯ä¸ºç©ºï¼ˆè¿™æ„味ç€æ— 论何时"
"外键都是主键的一部分)。 "
#. Tag: para
#: basic_mapping.xml:3928
#, no-c-format
msgid ""
"<literal>update (optional): specifies that the foreign key should "
"never be updated. This is implied whenever the foreign key is also part of "
"the primary key."
msgstr ""
"<literal>update(å¯é€‰ï¼‰ï¼šè¡¨æ˜Žå¤–键决ä¸åº”该被更新(这æ„味ç€æ— 论何时外"
"键都是主键的一部分)。 "
#. Tag: para
#: basic_mapping.xml:3934
#, no-c-format
msgid ""
"<literal>unique (optional): specifies that the foreign key should "
"have a unique constraint. This is implied whenever the foreign key is also "
"the primary key."
msgstr ""
"<literal>unique(å¯é€‰ï¼‰ï¼šè¡¨æ˜Žå¤–键应有唯一性约æŸï¼ˆè¿™æ„味ç€æ— 论何时外"
"键都是主键的一部分)。 "
#. Tag: para
#: basic_mapping.xml:3941
#, no-c-format
msgid ""
"For systems where delete performance is important, we recommend that all "
"keys should be defined <literal>on-delete=\"cascade\". Hibernate "
"uses a database-level <literal>ON CASCADE DELETE constraint, "
"instead of many individual <literal>DELETE statements. Be aware "
"that this feature bypasses Hibernate's usual optimistic locking strategy for "
"versioned data."
msgstr ""
"对那些看é‡åˆ 除性能的系统,我们推è所有的键都应该定义为 <literal>on-delete="
"\"cascade\"</literal>ï¼Œè¿™æ · Hibernate 将使用数æ®åº“级的 ON CASCADE "
"DELETE</literal> 约æŸï¼Œè€Œä¸æ˜¯å¤šä¸ª DELETE è¯å¥ã€‚注æ„,这个"
"特性会绕过 Hibernate 通常对版本数æ®ï¼ˆversioned data)采用的ä¹è§‚é”ç–略。 "
#. Tag: para
#: basic_mapping.xml:3949
#, no-c-format
msgid ""
"The <literal>not-null and update attributes are "
"useful when mapping a unidirectional one-to-many association. If you map a "
"unidirectional one-to-many association to a non-nullable foreign key, you "
"<emphasis>must declare the key column using <key not-"
"null=\"true\"></literal>."
msgstr ""
"<literal>not-null å’Œ update å±žæ€§åœ¨æ˜ å°„å•å‘一对多"
"å…³è”çš„æ—¶å€™æœ‰ç”¨ã€‚å¦‚æžœä½ æ˜ å°„ä¸€ä¸ªå•å‘一对多关è”到éžç©ºçš„(non-nullableï¼‰å¤–é”®ï¼Œä½ "
"<emphasis>必须 用 <key not-null=\"true\">. You can also import classes and "
"interfaces that are not explicitly mapped:"
msgstr ""
"å‡è®¾ä½ 的应用程åºæœ‰ä¸¤ä¸ªåŒæ ·åå—çš„æŒä¹…åŒ–ç±»ï¼Œä½†æ˜¯ä½ ä¸æƒ³åœ¨ Hibernate 查询ä¸ä½¿ç”¨ä»–"
"们的全é™å®šå。除了ä¾èµ– <literal>auto-import=\"true\" 以外,类也å¯ä»¥"
"被显å¼åœ°â€œimport(引用)â€ã€‚ä½ ç”šè‡³å¯ä»¥å¼•ç”¨æ²¡æœ‰è¢«æ˜Žç¡®æ˜ 射的类和接å£ã€‚ "
#. Tag: programlisting
#: basic_mapping.xml:3966
#, fuzzy, no-c-format
msgid "<import class=\"java.lang.Object\" rename=\"Universe\"/>"
msgstr "<import class=\"java.lang.Object\" rename=\"Universe\"/>"
#. Tag: programlisting
#: basic_mapping.xml:3975
#, fuzzy, no-c-format
msgid ""
"<import\n"
" class=\"ClassName\"\n"
" rename=\"ShortName\"\n"
"/>"
msgstr ""
"<import\n"
" class=\"ClassName\"\n"
" rename=\"ShortName\"\n"
"/>"
#. Tag: para
#: basic_mapping.xml:3979
#, no-c-format
msgid ""
"<literal>class: the fully qualified class name of any Java class."
msgstr "<literal>class:任何 Java 类的全é™å®šå。 "
#. Tag: para
#: basic_mapping.xml:3984
#, no-c-format
msgid ""
"<literal>rename (optional - defaults to the unqualified class "
"name): a name that can be used in the query language."
msgstr ""
"<literal>rename(å¯é€‰ — 默认为类的全é™å®šå):在查询è¯å¥ä¸å¯ä»¥ä½¿ç”¨"
"çš„åå—。 "
#. Tag: para
#: basic_mapping.xml:3992
#, no-c-format
msgid "This feature is unique to hbm.xml and is not supported in annotations."
msgstr ""
#. Tag: title
#: basic_mapping.xml:3998
#, no-c-format
msgid "Column and formula elements"
msgstr "å—æ®µå’Œè§„åˆ™å…ƒç´ ï¼ˆcolumn and formula elements) "
#. Tag: para
#: basic_mapping.xml:4000
#, no-c-format
msgid ""
"Mapping elements which accept a <literal>column attribute will "
"alternatively accept a <literal><column> subelement. "
"Likewise, <literal><formula> is an alternative to the "
"<literal>formula attribute. For example:"
msgstr ""
"ä»»ä½•æŽ¥å— <literal>column å±žæ€§çš„æ˜ å°„å…ƒç´ éƒ½å¯ä»¥é€‰æ‹©æŽ¥å— <"
"column></literal> åå…ƒç´ ã€‚åŒæ ·çš„,formula åå…ƒç´ ä¹Ÿå¯ä»¥"
"æ›¿æ¢ <literal><formula> 属性。 "
#. Tag: programlisting
#: basic_mapping.xml:4006
#, fuzzy, no-c-format
msgid ""
"<column\n"
" name=\"column_name\"\n"
" length=\"N\"\n"
" precision=\"N\"\n"
" scale=\"N\"\n"
" not-null=\"true|false\"\n"
" unique=\"true|false\"\n"
" unique-key=\"multicolumn_unique_key_name\"\n"
" index=\"index_name\"\n"
" sql-type=\"sql_type_name\"\n"
" check=\"SQL expression\"\n"
" default=\"SQL expression\"\n"
" read=\"SQL expression\"\n"
" write=\"SQL expression\"/>"
msgstr ""
"<column\n"
" name=\"column_name\"\n"
" length=\"N\"\n"
" precision=\"N\"\n"
" scale=\"N\"\n"
" not-null=\"true|false\"\n"
" unique=\"true|false\"\n"
" unique-key=\"multicolumn_unique_key_name\"\n"
" index=\"index_name\"\n"
" sql-type=\"sql_type_name\"\n"
" check=\"SQL expression\"\n"
" default=\"SQL expression\"/>"
#. Tag: programlisting
#: basic_mapping.xml:4008
#, fuzzy, no-c-format
msgid "<formula>SQL expression</formula>"
msgstr "<formula>SQL expression</formula>"
#. Tag: para
#: basic_mapping.xml:4010
#, no-c-format
msgid ""
"Most of the attributes on <literal>column provide a means of "
"tailoring the DDL during automatic schema generation. The <literal>readwrite attributes allow you to specify custom "
"SQL that Hibernate will use to access the column's value. For more on this, "
"see the discussion of <link linkend=\"mapping-column-read-and-write\">column "
"read and write expressions</link>."
msgstr ""
"<literal>column 上的大多数属性都æ供了在自动模å¼ç”Ÿæˆè¿‡ç¨‹ä¸å¯¹ DDL è¿›"
"è¡Œè£å‰ªçš„方法。<literal>read å’Œ write 属性å…è®¸ä½ "
"指定 Hibernate 用于访问å—段值的自定义的 SQL。关于更多的内容,请å‚考 <link "
"linkend=\"mapping-column-read-and-write\">column read and write expressions</"
"link>。"
#. Tag: para
#: basic_mapping.xml:4018
#, no-c-format
msgid ""
"The <literal>column and formula elements can "
"even be combined within the same property or association mapping to express, "
"for example, exotic join conditions."
msgstr ""
"<literal>column å’Œ formula 属性甚至å¯ä»¥åœ¨åŒä¸€ä¸ª"
"属性或关è”æ˜ å°„ä¸è¢«åˆå¹¶æ¥è¡¨è¾¾ï¼Œä¾‹å¦‚,一些奇异的连接æ¡ä»¶ã€‚"
#. Tag: programlisting
#: basic_mapping.xml:4022
#, fuzzy, no-c-format
msgid ""
"<many-to-one name=\"homeAddress\" class=\"Address\"\n"
" insert=\"false\" update=\"false\">\n"
" <column name=\"person_id\" not-null=\"true\" length=\"10\"/>\n"
" <formula>'MAILING'</formula>\n"
"</many-to-one>"
msgstr ""
"<many-to-one name=\"homeAddress\" class=\"Address\"\n"
" insert=\"false\" update=\"false\">\n"
" <column name=\"person_id\" not-null=\"true\" length=\"10\"/>\n"
" <formula>'MAILING'</formula>\n"
"</many-to-one>"
#. Tag: title
#: basic_mapping.xml:4028
#, no-c-format
msgid "Hibernate types"
msgstr "Hibernate 的类型 "
#. Tag: title
#: basic_mapping.xml:4031
#, no-c-format
msgid "Entities and values"
msgstr "实体(Entities)和值(values)"
#. Tag: para
#: basic_mapping.xml:4033
#, no-c-format
msgid ""
"In relation to the persistence service, Java language-level objects are "
"classified into two groups:"
msgstr "å’ŒæŒä¹…化æœåŠ¡ç›¸æ¯”,Java 级别的对象分为两个组别:"
#. Tag: para
#: basic_mapping.xml:4036
#, no-c-format
msgid ""
"An <emphasis>entity exists independently of any other objects "
"holding references to the entity. Contrast this with the usual Java model, "
"where an unreferenced object is garbage collected. Entities must be "
"explicitly saved and deleted. Saves and deletions, however, can be "
"<emphasis>cascaded from a parent entity to its children. This is "
"different from the ODMG model of object persistence by reachability and "
"corresponds more closely to how application objects are usually used in "
"large systems. Entities support circular and shared references. They can "
"also be versioned."
msgstr ""
"<emphasis>实体entity 独立于任何æŒæœ‰å®žä½“引用的对象。与通常的 Java "
"模型相比,ä¸å†è¢«å¼•ç”¨çš„对象会被当作垃圾收集掉。实体必须被显å¼çš„ä¿å˜å’Œåˆ 除(除"
"éžä¿å˜å’Œåˆ 除是从父实体å‘å实体引å‘çš„<emphasis>级è”)。这和 ODMG 模"
"åž‹ä¸å…³äºŽå¯¹è±¡é€šè¿‡å¯è§¦åŠä¿æŒæŒä¹…性有一些ä¸åŒ — 比较起æ¥æ›´åŠ 接近应用程åºå¯¹è±¡é€šå¸¸"
"在一个大系统ä¸çš„使用方法。实体支æŒå¾ªçŽ¯å¼•ç”¨å’Œäº¤å‰å¼•ç”¨ï¼Œå®ƒä»¬ä¹Ÿå¯ä»¥åŠ 上版本信"
"æ¯ã€‚ "
#. Tag: para
#: basic_mapping.xml:4046
#, no-c-format
msgid ""
"An entity's persistent state consists of references to other entities and "
"instances of <emphasis>value types. Values are primitives: "
"collections (not what is inside a collection), components and certain "
"immutable objects. Unlike entities, values in particular collections and "
"components, <emphasis>are persisted and deleted by reachability. "
"Since value objects and primitives are persisted and deleted along with "
"their containing entity, they cannot be independently versioned. Values have "
"no independent identity, so they cannot be shared by two entities or "
"collections."
msgstr ""
"一个实体的æŒä¹…状æ€åŒ…å«æŒ‡å‘其他实体和<emphasis>值类型实例的引用。值"
"å¯ä»¥æ˜¯åŽŸå§‹ç±»åž‹ï¼Œé›†åˆï¼ˆä¸æ˜¯é›†åˆä¸çš„对象),组件或者特定的ä¸å¯å˜å¯¹è±¡ã€‚与实体ä¸"
"åŒï¼Œå€¼ï¼ˆç‰¹åˆ«æ˜¯é›†åˆå’Œç»„件)是通过å¯è§¦åŠæ€§æ¥è¿›è¡ŒæŒä¹…åŒ–å’Œåˆ é™¤çš„ã€‚å› ä¸ºå€¼å¯¹è±¡ï¼ˆå’Œ"
"原始类型数æ®ï¼‰æ˜¯éšç€åŒ…å«ä»–们的实体而被æŒä¹…åŒ–å’Œåˆ é™¤çš„ï¼Œä»–ä»¬ä¸èƒ½è¢«ç‹¬ç«‹çš„åŠ ä¸Šç‰ˆ"
"本信æ¯ã€‚å€¼æ²¡æœ‰ç‹¬ç«‹çš„æ ‡è¯†ï¼Œæ‰€ä»¥ä»–ä»¬ä¸èƒ½è¢«ä¸¤ä¸ªå®žä½“或者集åˆå…±äº«ã€‚ "
#. Tag: para
#: basic_mapping.xml:4056
#, no-c-format
msgid ""
"Until now, we have been using the term \"persistent class\" to refer to "
"entities. We will continue to do that. Not all user-defined classes with a "
"persistent state, however, are entities. A <emphasis>component is "
"a user-defined class with value semantics. A Java property of type "
"<literal>java.lang.String also has value semantics. Given this "
"definition, all types (classes) provided by the JDK have value type "
"semantics in Java, while user-defined types can be mapped with entity or "
"value type semantics. This decision is up to the application developer. An "
"entity class in a domain model will normally have shared references to a "
"single instance of that class, while composition or aggregation usually "
"translates to a value type."
msgstr ""
"直到现在,我们都一直使用术è¯â€œæŒä¹…ç±»â€ï¼ˆpersistent class)æ¥ä»£è¡¨å®žä½“。我们ä»ç„¶"
"会这么åšã€‚ç„¶è€Œä¸¥æ ¼è¯´æ¥ï¼Œä¸æ˜¯æ‰€æœ‰çš„用户自定义的,带有æŒä¹…化状æ€çš„类都是实体。"
"<emphasis>组件就是用户自定义类,å´æ˜¯å€¼è¯ä¹‰çš„。java.lang."
"String</literal> 类型的 java 属性也是值è¯ä¹‰çš„。给了这个定义以åŽï¼Œæˆ‘们å¯ä»¥è¯´æ‰€"
"有 JDK æ供的类型(类)都是值类型的è¯ä¹‰ï¼Œè€Œç”¨äºŽè‡ªå®šä¹‰ç±»åž‹å¯èƒ½è¢«æ˜ 射为实体类型"
"或值类型è¯ä¹‰ã€‚采用哪ç§ç±»åž‹çš„è¯ä¹‰å–决于开å‘人员。在领域模型ä¸ï¼Œå¯»æ‰¾å®žä½“类的一"
"个好线索是共享引用指å‘这个类的å•ä¸€å®žä¾‹ï¼Œè€Œç»„åˆæˆ–èšåˆé€šå¸¸è¢«è½¬åŒ–为值类型。 "
#. Tag: para
#: basic_mapping.xml:4069
#, no-c-format
msgid "We will revisit both concepts throughout this reference guide."
msgstr "我们会在本文档ä¸é‡å¤ç¢°åˆ°è¿™ä¸¤ä¸ªæ¦‚念。 "
#. Tag: para
#: basic_mapping.xml:4072
#, no-c-format
msgid ""
"The challenge is to map the Java type system, and the developers' definition "
"of entities and value types, to the SQL/database type system. The bridge "
"between both systems is provided by Hibernate. For entities, <literal><"
"class></literal>, <subclass> and so on are used. "
"For value types we use <literal><property> , <"
"component></literal>etc., that usually have a type "
"attribute. The value of this attribute is the name of a Hibernate "
"<emphasis>mapping type. Hibernate provides a range of mappings "
"for standard JDK value types out of the box. You can write your own mapping "
"types and implement your own custom conversion strategies."
msgstr ""
"挑战在于将 java 类型系统(和开å‘者定义的实体和值类型)æ˜ å°„åˆ° SQL/æ•°æ®åº“类型系"
"统。Hibernate æ供了连接两个系统之间的桥æ¢ï¼šå¯¹äºŽå®žä½“类型,我们使用 "
"<literal><class> ,<subclass> ç‰ç‰ã€‚"
"对于值类型,我们使用 <literal><property>,<"
"component></literal> åŠå…¶ä»–,通常跟éšç€ type 属性。这个"
"属性的值是Hibernate çš„<emphasis>æ˜ å°„ç±»åž‹çš„åå—。Hibernate æ供了许"
"多现æˆçš„æ˜ å°„ï¼ˆæ ‡å‡†çš„ JDK å€¼ç±»åž‹ï¼‰ã€‚ä½ ä¹Ÿå¯ä»¥ç¼–å†™è‡ªå·±çš„æ˜ å°„ç±»åž‹å¹¶å®žçŽ°è‡ªå®šä¹‰çš„å˜"
"æ¢ç–略,éšåŽæˆ‘们会看到这点。 "
#. Tag: para
#: basic_mapping.xml:4085
#, no-c-format
msgid ""
"With the exception of collections, all built-in Hibernate types support null "
"semantics."
msgstr ""
"所有的 Hibernate 内建类型,除了 collections 以外,都支æŒç©ºï¼ˆnull)è¯ä¹‰ã€‚ "
#. Tag: title
#: basic_mapping.xml:4090
#, no-c-format
msgid "Basic value types"
msgstr "基本值类型"
#. Tag: para
#: basic_mapping.xml:4092
#, no-c-format
msgid ""
"The built-in <emphasis>basic mapping types can be roughly "
"categorized into the following:"
msgstr "内置的 <emphasis>basic mapping types å¯ä»¥å¤§è‡´åœ°åˆ†ç±»ä¸ºï¼š"
#. Tag: literal
#: basic_mapping.xml:4095
#, fuzzy, no-c-format
msgid ""
"integer, long, short, float, double, character, byte, boolean, yes_no, "
"true_false"
msgstr ""
"<literal>integer, long, short, float, double, character, byte, boolean, "
"yes_no, true_false</literal>"
#. Tag: para
#: basic_mapping.xml:4099
#, no-c-format
msgid ""
"Type mappings from Java primitives or wrapper classes to appropriate (vendor-"
"specific) SQL column types. <literal>boolean, yes_no and "
"<literal>true_false are all alternative encodings for a Java "
"<literal>boolean or java.lang.Boolean ."
msgstr ""
"这些类型都对应 Java 的原始类型或者其å°è£…类,æ¥ç¬¦åˆï¼ˆç‰¹å®šåŽ‚商的)SQL å—段类"
"型。<literal>boolean, yes_no 和 true_false 都是 "
"Java ä¸ <literal>boolean 或者 java.lang.Boolean "
"çš„å¦å¤–说法。"
#. Tag: literal
#: basic_mapping.xml:4109
#, no-c-format
msgid "string"
msgstr "string"
#. Tag: para
#: basic_mapping.xml:4112
#, no-c-format
msgid ""
"A type mapping from <literal>java.lang.String to VARCHARVARCHAR2 )."
msgstr ""
"从 <literal>java.lang.String 到 VARCHAR (或者 "
"Oracle çš„ <literal>VARCHAR2ï¼‰çš„æ˜ å°„ã€‚"
#. Tag: literal
#: basic_mapping.xml:4119
#, fuzzy, no-c-format
msgid "date, time, timestamp"
msgstr "<literal>date, time, timestamp"
#. Tag: para
#: basic_mapping.xml:4122
#, no-c-format
msgid ""
"Type mappings from <literal>java.util.Date and its subclasses to "
"SQL types <literal>DATE, TIME and "
"<literal>TIMESTAMP (or equivalent)."
msgstr ""
"从 <literal>java.util.Date 和其å类到 SQL 类型 DATETIME å’Œ TIMESTAMP (或ç‰ä»·ç±»"
"åž‹ï¼‰çš„æ˜ å°„ã€‚"
#. Tag: literal
#: basic_mapping.xml:4130
#, fuzzy, no-c-format
msgid "calendar, calendar_date"
msgstr "<literal>calendar, calendar_date"
#. Tag: para
#: basic_mapping.xml:4133
#, no-c-format
msgid ""
"Type mappings from <literal>java.util.Calendar to SQL types "
"<literal>TIMESTAMP and DATE (or equivalent)."
msgstr ""
"从 <literal>java.util.Calendar 到 SQL 类型 TIMESTAMPDATE (或ç‰ä»·ç±»åž‹ï¼‰çš„æ˜ å°„ã€‚"
#. Tag: literal
#: basic_mapping.xml:4140
#, fuzzy, no-c-format
msgid "big_decimal, big_integer"
msgstr "<literal>big_decimal, big_integer"
#. Tag: para
#: basic_mapping.xml:4143
#, no-c-format
msgid ""
"Type mappings from <literal>java.math.BigDecimal and java."
"math.BigInteger</literal> to NUMERIC (or Oracle "
"<literal>NUMBER )."
msgstr ""
"从 <literal>java.math.BigDecimal 和 java.math.BigIntegerNUMERIC (或者 Oracle 的 NUMBER"
#. Tag: para
#: basic_mapping.xml:4154
#, no-c-format
msgid ""
"Type mappings from <literal>java.util.Locale , java.util."
"TimeZone</literal> and java.util.Currency to "
"<literal>VARCHAR (or Oracle VARCHAR2 ). "
"Instances of <literal>Locale and Currency are "
"mapped to their ISO codes. Instances of <literal>TimeZone are "
"mapped to their <literal>ID."
msgstr ""
"从 <literal>java.util.Locale,java.util.TimeZonejava.util.Currency 到 VARCHARVARCHAR2 ç±»åž‹ï¼‰çš„æ˜ å°„ã€‚"
"<literal>Locale å’Œ Currency çš„å®žä¾‹è¢«æ˜ å°„ä¸ºå®ƒä»¬"
"çš„ ISO 代ç 。<literal>TimeZone 的实例被影射为它的 ID to VARCHARVARCHAR2 ). A Class "
"is mapped to its fully qualified name."
msgstr ""
"从 <literal>java.lang.Class 到 VARCHAR (或者 "
"Oracle çš„ <literal>VARCHAR2 ç±»åž‹ï¼‰çš„æ˜ å°„ã€‚Class "
"è¢«æ˜ å°„ä¸ºå®ƒçš„å…¨é™å®šå。"
#. Tag: literal
#: basic_mapping.xml:4178
#, no-c-format
msgid "binary"
msgstr "binary"
#. Tag: para
#: basic_mapping.xml:4181
#, no-c-format
msgid "Maps byte arrays to an appropriate SQL binary type."
msgstr "把å—节数组(byte arraysï¼‰æ˜ å°„ä¸ºå¯¹åº”çš„ SQL 二进制类型。"
#. Tag: literal
#: basic_mapping.xml:4186
#, no-c-format
msgid "text"
msgstr "text"
#. Tag: para
#: basic_mapping.xml:4189
#, fuzzy, no-c-format
msgid ""
"Maps long Java strings to a SQL <literal>LONGVARCHAR or "
"<literal>TEXT type."
msgstr ""
"把长 Java å—ç¬¦ä¸²æ˜ å°„ä¸º SQL çš„ <literal>CLOB 或者 TEXT."
msgstr ""
"把长 Java å—ç¬¦ä¸²æ˜ å°„ä¸º SQL çš„ <literal>CLOB 或者 TEXT with the name of "
"a serializable Java class or interface that does not default to a basic type."
msgstr ""
"把å¯åºåˆ—化的 Java ç±»åž‹æ˜ å°„åˆ°å¯¹åº”çš„ SQL äºŒè¿›åˆ¶ç±»åž‹ã€‚ä½ ä¹Ÿå¯ä»¥ä¸ºä¸€ä¸ªå¹¶éžé»˜è®¤ä¸ºåŸº"
"本类型的å¯åºåˆ—化 Java 类或者接å£æŒ‡å®š Hibernate 类型 <literal>serializable and "
"<literal>java.sql.Blob . These types can be inconvenient for some "
"applications, since the blob or clob object cannot be reused outside of a "
"transaction. Driver support is patchy and inconsistent."
msgstr ""
"JDBC 类 <literal>java.sql.Clob 和 java.sql.Blob "
"çš„æ˜ å°„ã€‚æŸäº›ç¨‹åºå¯èƒ½ä¸é€‚åˆä½¿ç”¨è¿™ä¸ªç±»åž‹ï¼Œå› 为 blob å’Œ clob 对象å¯èƒ½åœ¨ä¸€ä¸ªäº‹åŠ¡"
"ä¹‹å¤–æ˜¯æ— æ³•é‡ç”¨çš„。(而且, 驱动程åºå¯¹è¿™ç§ç±»åž‹çš„支æŒå……满ç€è¡¥ä¸å’Œå‰åŽçŸ›ç›¾ã€‚) "
#. Tag: literal
#: basic_mapping.xml:4228
#, no-c-format
msgid "materialized_clob"
msgstr ""
#. Tag: para
#: basic_mapping.xml:4231
#, no-c-format
msgid ""
"Maps long Java strings to a SQL <literal>CLOB type. When read, the "
"<literal>CLOB value is immediately materialized into a Java "
"string. Some drivers require the <literal>CLOB value to be read "
"within a transaction. Once materialized, the Java string is available "
"outside of the transaction."
msgstr ""
#. Tag: literal
#: basic_mapping.xml:4241
#, fuzzy, no-c-format
msgid "materialized_blob"
msgstr "serializable"
#. Tag: para
#: basic_mapping.xml:4244
#, no-c-format
msgid ""
"Maps long Java byte arrays to a SQL <literal>BLOB type. When read, "
"the <literal>BLOB value is immediately materialized into a byte "
"array. Some drivers require the <literal>BLOB value to be read "
"within a transaction. Once materialized, the byte array is available outside "
"of the transaction."
msgstr ""
#. Tag: literal
#: basic_mapping.xml:4254
#, fuzzy, no-c-format
msgid ""
"imm_date, imm_time, imm_timestamp, imm_calendar, imm_calendar_date, "
"imm_serializable, imm_binary"
msgstr ""
"<literal>imm_date, imm_time, imm_timestamp, imm_calendar, imm_calendar_date, "
"imm_serializable, imm_binary</literal>"
#. Tag: para
#: basic_mapping.xml:4258
#, no-c-format
msgid ""
"Type mappings for what are considered mutable Java types. This is where "
"Hibernate makes certain optimizations appropriate only for immutable Java "
"types, and the application treats the object as immutable. For example, you "
"should not call <literal>Date.setTime() for an instance mapped as "
"<literal>imm_timestamp. To change the value of the property, and "
"have that change made persistent, the application must assign a new, "
"nonidentical, object to the property."
msgstr ""
"一般æ¥è¯´ï¼Œæ˜ 射类型被å‡å®šä¸ºæ˜¯å¯å˜çš„ Java 类型,åªæœ‰å¯¹ä¸å¯å˜ Java 类型,"
"Hibernate 会采å–特定的优化措施,应用程åºä¼šæŠŠè¿™äº›å¯¹è±¡ä½œä¸ºä¸å¯å˜å¯¹è±¡å¤„ç†ã€‚比"
"å¦‚ï¼Œä½ ä¸åº”该对作为 <literal>imm_timestamp æ˜ å°„çš„ Date 执行 "
"<literal>Date.setTime()。è¦æ”¹å˜å±žæ€§çš„值,并且ä¿å˜è¿™ä¸€æ”¹å˜ï¼Œåº”用程åº"
"必须对这一属性é‡æ–°è®¾ç½®ä¸€ä¸ªæ–°çš„(ä¸ä¸€æ ·çš„)对象。 "
#. Tag: para
#: basic_mapping.xml:4270
#, no-c-format
msgid ""
"Unique identifiers of entities and collections can be of any basic type "
"except <literal>binary, blob and clob〠blobclob 之外的任何基础类型。(è”åˆæ ‡è¯†ä¹Ÿæ˜¯å…许"
"的,åŽé¢ä¼šè¯´åˆ°ã€‚)"
#. Tag: para
#: basic_mapping.xml:4275
#, no-c-format
msgid ""
"The basic value types have corresponding <literal>Type constants "
"defined on <literal>org.hibernate.Hibernate. For example, "
"<literal>Hibernate.STRING represents the string "
"type."
msgstr ""
"在 <literal>org.hibernate.Hibernate ä¸ï¼Œå®šä¹‰äº†åŸºç¡€ç±»åž‹å¯¹åº”çš„ "
"<literal>Type 常é‡ã€‚比如,Hibernate.STRING 代表 "
"<literal>string 类型。"
#. Tag: title
#: basic_mapping.xml:4282
#, no-c-format
msgid "Custom value types"
msgstr "自定义值类型"
#. Tag: para
#: basic_mapping.xml:4284
#, no-c-format
msgid ""
"It is relatively easy for developers to create their own value types. For "
"example, you might want to persist properties of type <literal>java.lang."
"BigInteger</literal> to VARCHAR columns. Hibernate does "
"not provide a built-in type for this. Custom types are not limited to "
"mapping a property, or collection element, to a single table column. So, for "
"example, you might have a Java property <literal>getName()/"
"<literal>setName() of type java.lang.String "
"that is persisted to the columns <literal>FIRST_NAME, "
"<literal>INITIAL, SURNAME ."
msgstr ""
"å¼€å‘è€…åˆ›å»ºå±žäºŽä»–ä»¬è‡ªå·±çš„å€¼ç±»åž‹ä¹Ÿæ˜¯å¾ˆå®¹æ˜“çš„ã€‚æ¯”å¦‚è¯´ï¼Œä½ å¯èƒ½å¸Œæœ›æŒä¹…化 "
"<literal>java.lang.BigInteger 类型的属性,æŒä¹…化æˆä¸º "
"<literal>VARCHAR å—段。Hibernateæ²¡æœ‰å†…ç½®è¿™æ ·ä¸€ç§ç±»åž‹ã€‚自定义类型能"
"å¤Ÿæ˜ å°„ä¸€ä¸ªå±žæ€§(或集åˆå…ƒç´ )到ä¸æ¢ä¸€ä¸ªæ•°æ®åº“表å—æ®µã€‚æ¯”å¦‚è¯´ï¼Œä½ å¯èƒ½æœ‰è¿™æ ·çš„ "
"Java 属性:<literal>getName()/setName() ,这是 "
"<literal>java.lang.String 类型的,对应的æŒä¹…化到三个å—段:"
"<literal>FIRST_NAME,INITIAL ,SURNAMEorg.hibernate.CompositeUserType and "
"declare properties using the fully qualified classname of the type. View "
"<literal>org.hibernate.test.DoubleStringType to see the kind of "
"things that are possible."
msgstr ""
"è¦å®žçŽ°ä¸€ä¸ªè‡ªå®šä¹‰ç±»åž‹ï¼Œå¯ä»¥å®žçŽ° <literal>org.hibernate.UserType 或 "
"<literal>org.hibernate.CompositeUserType ä¸çš„任一个,并且使用类型"
"çš„ Java å…¨é™å®šç±»åæ¥å®šä¹‰å±žæ€§ã€‚请查看 <literal>org.hibernate.test."
"DoubleStringType</literal> 这个例å,看看它是怎么åšçš„。 "
#. Tag: programlisting
#: basic_mapping.xml:4302
#, fuzzy, no-c-format
msgid ""
"<property name=\"twoStrings\" type=\"org.hibernate.test.DoubleStringType"
"\">\n"
" <column name=\"first_string\"/>\n"
" <column name=\"second_string\"/>\n"
"</property>"
msgstr ""
"<property name=\"twoStrings\" type=\"org.hibernate.test.DoubleStringType"
"\">\n"
" <column name=\"first_string\"/>\n"
" <column name=\"second_string\"/>\n"
"</property>"
#. Tag: para
#: basic_mapping.xml:4304
#, no-c-format
msgid ""
"Notice the use of <literal><column> tags to map a property "
"to multiple columns."
msgstr ""
"注æ„使用 <literal><column> æ ‡ç¾æ¥æŠŠä¸€ä¸ªå±žæ€§æ˜ 射到多个å—段的åš"
"法。"
#. Tag: para
#: basic_mapping.xml:4307
#, no-c-format
msgid ""
"The <literal>CompositeUserType, EnhancedUserTypeUserCollectionType , and "
"<literal>UserVersionType interfaces provide support for more "
"specialized uses."
msgstr ""
"<literal>CompositeUserType,EnhancedUserType ,"
"<literal>UserCollectionType 和 UserVersionType "
"接å£ä¸ºæ›´ç‰¹æ®Šçš„使用方å¼æ供支æŒã€‚"
#. Tag: para
#: basic_mapping.xml:4313
#, no-c-format
msgid ""
"You can even supply parameters to a <literal>UserType in the "
"mapping file. To do this, your <literal>UserType must implement "
"the <literal>org.hibernate.usertype.ParameterizedType interface. "
"To supply parameters to your custom type, you can use the <literal><"
"type></literal> element in your mapping files."
msgstr ""
"ä½ ç”šè‡³å¯ä»¥åœ¨ä¸€ä¸ªæ˜ 射文件ä¸æä¾›å‚数给一个 <literal>UserType。 为了这"
"æ ·åšï¼Œä½ çš„ <literal>UserType 必须实现 org.hibernate."
"usertype.ParameterizedType</literal> 接å£ã€‚为了给自定义类型æä¾›å‚æ•°ï¼Œä½ å¯ä»¥åœ¨"
"æ˜ å°„æ–‡ä»¶ä¸ä½¿ç”¨ <literal><type> å…ƒç´ ã€‚ "
#. Tag: programlisting
#: basic_mapping.xml:4320
#, fuzzy, no-c-format
msgid ""
"<property name=\"priority\">\n"
" <type name=\"com.mycompany.usertypes.DefaultValueIntegerType\">\n"
" <param name=\"default\">0</param>\n"
" </type>\n"
"</property>"
msgstr ""
"<property name=\"priority\">\n"
" <type name=\"com.mycompany.usertypes.DefaultValueIntegerType\">\n"
" <param name=\"default\">0</param>\n"
" </type>\n"
"</property>"
#. Tag: para
#: basic_mapping.xml:4322
#, no-c-format
msgid ""
"The <literal>UserType can now retrieve the value for the parameter "
"named <literal>default from the Properties "
"object passed to it."
msgstr ""
"现在,<literal>UserType å¯ä»¥ä»Žä¼ 入的 Properties "
"对象ä¸å¾—到 <literal>default å‚数的值。"
#. Tag: para
#: basic_mapping.xml:4326
#, no-c-format
msgid ""
"If you regularly use a certain <literal>UserType, it is useful to "
"define a shorter name for it. You can do this using the <literal><"
"typedef></literal> element. Typedefs assign a name to a custom type, and "
"can also contain a list of default parameter values if the type is "
"parameterized."
msgstr ""
"å¦‚æžœä½ éžå¸¸é¢‘ç¹åœ°ä½¿ç”¨æŸä¸€ <literal>UserType,å¯ä»¥ä¸ºä»–定义一个简称。"
"è¿™å¯ä»¥é€šè¿‡ä½¿ç”¨ <literal><typedef> å…ƒç´ æ¥å®žçŽ°ã€‚Typedefs 为一自"
"定义类型赋予一个å称,并且如果æ¤ç±»åž‹æ˜¯å‚数化的,还å¯ä»¥åŒ…å«ä¸€ç³»åˆ—默认的å‚æ•°"
"值。 "
#. Tag: programlisting
#: basic_mapping.xml:4332
#, fuzzy, no-c-format
msgid ""
"<typedef class=\"com.mycompany.usertypes.DefaultValueIntegerType\" name="
"\"default_zero\">\n"
" <param name=\"default\">0</param>\n"
"</typedef>"
msgstr ""
"<typedef class=\"com.mycompany.usertypes.DefaultValueIntegerType\" name="
"\"default_zero\">\n"
" <param name=\"default\">0</param>\n"
"</typedef>"
#. Tag: programlisting
#: basic_mapping.xml:4334
#, fuzzy, no-c-format
msgid "<property name=\"priority\" type=\"default_zero\"/>"
msgstr "<property name=\"priority\" type=\"default_zero\"/>"
#. Tag: para
#: basic_mapping.xml:4336
#, no-c-format
msgid ""
"It is also possible to override the parameters supplied in a typedef on a "
"case-by-case basis by using type parameters on the property mapping."
msgstr ""
"也å¯ä»¥æ ¹æ®å…·ä½“æ¡ˆä¾‹é€šè¿‡å±žæ€§æ˜ å°„ä¸çš„类型å‚数覆盖在 typedef ä¸æ供的å‚数。"
#. Tag: para
#: basic_mapping.xml:4340
#, no-c-format
msgid ""
"Even though Hibernate's rich range of built-in types and support for "
"components means you will rarely need to use a custom type, it is considered "
"good practice to use custom types for non-entity classes that occur "
"frequently in your application. For example, a <literal>MonetaryAmountCompositeUserType 类使用 "
"<literal>CompositeUserType æ¥æ˜ 射是ä¸é”™çš„选择,虽然他å¯ä»¥å¾ˆå®¹æ˜“地被"
"æ˜ å°„æˆç»„ä»¶ã€‚è¿™æ ·åšçš„动机之一是抽象。使用自定义类型,以åŽå‡è‹¥ä½ 改å˜è¡¨ç¤ºé‡‘é¢çš„"
"方法时,它å¯ä»¥ä¿è¯æ˜ 射文件ä¸éœ€è¦ä¿®æ”¹ã€‚ "
#. Tag: title
#: basic_mapping.xml:4353
#, no-c-format
msgid "Mapping a class more than once"
msgstr "å¤šæ¬¡æ˜ å°„åŒä¸€ä¸ªç±»"
#. Tag: para
#: basic_mapping.xml:4355
#, no-c-format
msgid ""
"It is possible to provide more than one mapping for a particular persistent "
"class. In this case, you must specify an <emphasis>entity name to "
"disambiguate between instances of the two mapped entities. By default, the "
"entity name is the same as the class name. Hibernate lets you specify the "
"entity name when working with persistent objects, when writing queries, or "
"when mapping associations to the named entity."
msgstr ""
"对特定的æŒä¹…åŒ–ç±»ï¼Œæ˜ å°„å¤šæ¬¡æ˜¯å…许的。这ç§æƒ…å½¢ä¸‹ï¼Œä½ å¿…é¡»æŒ‡å®š <emphasis>entity "
"name</emphasis> æ¥åŒºåˆ«ä¸åŒæ˜ 射实体的对象实例。(默认情况下,实体åå—和类å是"
"相åŒçš„。) Hibernate 在æ“作æŒä¹…化对象ã€ç¼–写查询æ¡ä»¶ï¼Œæˆ–者把关è”æ˜ å°„åˆ°æŒ‡å®šå®žä½“"
"时,å…è®¸ä½ æŒ‡å®šè¿™ä¸ª entity name(实体åå—)。 "
#. Tag: programlisting
#: basic_mapping.xml:4363
#, fuzzy, no-c-format
msgid ""
"<class name=\"Contract\" table=\"Contracts\"\n"
" entity-name=\"CurrentContract\">\n"
" ...\n"
" <set name=\"history\" inverse=\"true\"\n"
" order-by=\"effectiveEndDate desc\">\n"
" <key column=\"currentContractId\"/>\n"
" <one-to-many entity-name=\"HistoricalContract\"/>\n"
" </set>\n"
"</class>\n"
"\n"
"<class name=\"Contract\" table=\"ContractHistory\"\n"
" entity-name=\"HistoricalContract\">\n"
" ...\n"
" <many-to-one name=\"currentContract\"\n"
" column=\"currentContractId\"\n"
" entity-name=\"CurrentContract\"/>\n"
"</class>"
msgstr ""
"<class name=\"Contract\" table=\"Contracts\" \n"
" entity-name=\"CurrentContract\">\n"
" ...\n"
" <set name=\"history\" inverse=\"true\" \n"
" order-by=\"effectiveEndDate desc\">\n"
" <key column=\"currentContractId\"/>\n"
" <one-to-many entity-name=\"HistoricalContract\"/>\n"
" </set>\n"
"</class>\n"
"\n"
"<class name=\"Contract\" table=\"ContractHistory\" \n"
" entity-name=\"HistoricalContract\">\n"
" ...\n"
" <many-to-one name=\"currentContract\" \n"
" column=\"currentContractId\" \n"
" entity-name=\"CurrentContract\"/>\n"
"</class>"
#. Tag: para
#: basic_mapping.xml:4365
#, no-c-format
msgid ""
"Associations are now specified using <literal>entity-name instead "
"of <literal>class."
msgstr ""
"注æ„这里关è”是如何用 <literal>entity-name æ¥ä»£æ›¿ class(方言)æ¥ä½¿ç”¨æ£ç¡®çš„引å·é£Žæ ¼(通常是åŒå¼•å·ï¼Œä½†æ˜¯"
"在 SQL Server ä¸æ˜¯æ‹¬å·ï¼ŒMySQL ä¸æ˜¯åå‘引å·)。 "
#. Tag: programlisting
#: basic_mapping.xml:4382
#, fuzzy, no-c-format
msgid ""
"@Entity @Table(name=\"`Line Item`\")\n"
"class LineItem {\n"
" @id @Column(name=\"`Item Id`\") Integer id;\n"
" @Column(name=\"`Item #`\") int itemNumber\n"
"}\n"
"\n"
"<class name=\"LineItem\" table=\"`Line Item`\">\n"
" <id name=\"id\" column=\"`Item Id`\"/><generator class="
"\"assigned\"/></id>\n"
" <property name=\"itemNumber\" column=\"`Item #`\"/>\n"
" ...\n"
"</class>"
msgstr ""
"<class name=\"LineItem\" table=\"`Line Item`\">\n"
" <id name=\"id\" column=\"`Item Id`\"/><generator class="
"\"assigned\"/></id>\n"
" <property name=\"itemNumber\" column=\"`Item #`\"/>\n"
" ...\n"
"</class>"
#. Tag: title
#: basic_mapping.xml:4386
#, no-c-format
msgid "Generated properties"
msgstr "æ•°æ®åº“生æˆå±žæ€§ï¼ˆGenerated Properties) "
#. Tag: para
#: basic_mapping.xml:4388
#, no-c-format
msgid ""
"Generated properties are properties that have their values generated by the "
"database. Typically, Hibernate applications needed to <literal>refreshtimestamps, "
"and <link linkend=\"mapping-declaration-property\">simple properties, "
"can be marked as generated."
msgstr ""
"è¢«æ ‡æ˜Žä¸º generated 的属性还必须是 non-insertable å’Œ non-updateable 的。åªæœ‰ "
"<link linkend=\"mapping-declaration-version\">versions〠和 å¯ä»¥è¢«æ ‡æ˜Žä¸º "
"generated。 "
#. Tag: para
#: basic_mapping.xml:4404
#, no-c-format
msgid ""
"<literal>never (the default): the given property value is not "
"generated within the database."
msgstr "<literal>neverï¼ˆé»˜è®¤ï¼‰æ ‡æ˜Žæ¤å±žæ€§å€¼ä¸æ˜¯ä»Žæ•°æ®åº“ä¸ç”Ÿæˆã€‚ "
#. Tag: para
#: basic_mapping.xml:4407
#, no-c-format
msgid ""
"<literal>insert: the given property value is generated on insert, "
"but is not regenerated on subsequent updates. Properties like created-date "
"fall into this category. Even though <link linkend=\"mapping-declaration-"
"version\">version</link> and properties can be marked as generated, this option is "
"not available."
msgstr ""
"<literal>insert — æ ‡æ˜Žæ¤å±žæ€§å€¼åœ¨ insert 的时候生æˆï¼Œä½†æ˜¯ä¸ä¼šåœ¨éšåŽ"
"çš„ update æ—¶é‡æ–°ç”Ÿæˆã€‚比如说创建日期就归属于这类。注æ„虽然 <link linkend="
"\"mapping-declaration-version\">version</link> å’Œ 属性å¯ä»¥è¢«æ ‡æ³¨ä¸º generated,但是ä¸é€‚"
"用这个选项。"
#. Tag: para
#: basic_mapping.xml:4414
#, no-c-format
msgid ""
"<literal>always: the property value is generated both on insert "
"and on update."
msgstr ""
"<literal>always — æ ‡æ˜Žæ¤å±žæ€§å€¼åœ¨ insert å’Œ update 时都会被生æˆã€‚ "
#. Tag: para
#: basic_mapping.xml:4417
#, no-c-format
msgid "To mark a property as generated, use <classname>@Generated."
msgstr ""
#. Tag: title
#: basic_mapping.xml:4422
#, fuzzy, no-c-format
msgid "Column transformers: read and write expressions"
msgstr "å—段的读写表达å¼"
#. Tag: para
#: basic_mapping.xml:4424
#, fuzzy, no-c-format
msgid ""
"Hibernate allows you to customize the SQL it uses to read and write the "
"values of columns mapped to <link linkend=\"mapping-declaration-property"
"\">simple properties</link>. For example, if your database provides a set of "
"data encryption functions, you can invoke them for individual columns like "
"this:"
msgstr ""
"Hibernate å…è®¸ä½ è‡ªå®šä¹‰ SQL ä»¥è¯»å†™æ˜ å°„<link linkend=\"mapping-declaration-"
"property\">简å•å±žæ€§</link>çš„å—æ®µå€¼ã€‚ä¾‹å¦‚ï¼Œå¦‚æžœä½ çš„æ•°æ®åº“æ供了一套数æ®åŠ 密方"
"æ³•ï¼Œä½ å¯ä»¥åœ¨å•ä¸ªå—段上调用它们:<programlisting role=\"XML\"><property "
"name=\"creditCardNumber\"> <column name=\"credit_card_num\" read="
"\"decrypt(credit_card_num)\" write=\"encrypt(?)\"/> </property></"
"programlisting>"
#. Tag: programlisting
#: basic_mapping.xml:4430
#, no-c-format
msgid ""
"@Entity\n"
"class CreditCard {\n"
" @Column(name=\"credit_card_num\")\n"
" @ColumnTransformer(\n"
" read=\"decrypt(credit_card_num)\", \n"
" write=\"encrypt(?)\")\n"
" public String getCreditCardNumber() { return creditCardNumber; }\n"
" public void setCreditCardNumber(String number) { this.creditCardNumber = "
"number; }\n"
" private String creditCardNumber;\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:4432
#, no-c-format
msgid "or in XML"
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:4434
#, no-c-format
msgid ""
"<property name=\"creditCardNumber\">\n"
" <column \n"
" name=\"credit_card_num\"\n"
" read=\"decrypt(credit_card_num)\"\n"
" write=\"encrypt(?)\"/>\n"
"</property>"
msgstr ""
#. Tag: para
#: basic_mapping.xml:4437
#, no-c-format
msgid ""
"You can use the plural form <classname>@ColumnTransformers if "
"more than one columns need to define either of these rules."
msgstr ""
#. Tag: para
#: basic_mapping.xml:4442
#, no-c-format
msgid ""
"If a property uses more that one column, you must use the "
"<literal>forColumn attribute to specify which column, the "
"expressions are targeting."
msgstr ""
#. Tag: programlisting
#: basic_mapping.xml:4446
#, no-c-format
msgid ""
"@Entity\n"
"class User {\n"
" @Type(type=\"com.acme.type.CreditCardType\")\n"
" @Columns( {\n"
" @Column(name=\"credit_card_num\"),\n"
" @Column(name=\"exp_date\") } )\n"
" @ColumnTransformer(\n"
" forColumn=\"credit_card_num\", \n"
" read=\"decrypt(credit_card_num)\", \n"
" write=\"encrypt(?)\")\n"
" public CreditCard getCreditCard() { return creditCard; }\n"
" public void setCreditCard(CreditCard card) { this.creditCard = card; }\n"
" private CreditCard creditCard;\n"
"}"
msgstr ""
#. Tag: para
#: basic_mapping.xml:4448
#, no-c-format
msgid ""
"Hibernate applies the custom expressions automatically whenever the property "
"is referenced in a query. This functionality is similar to a derived-"
"property <literal>formula with two differences:"
msgstr ""
"æ¯å½“属性在查询里被引用时,Hibernate 都自动应用自定义的表达å¼ã€‚è¿™ç§åŠŸèƒ½å’Œ "
"derived-property <literal>formula 相似,但有两个ä¸åŒçš„地方:"
#. Tag: para
#: basic_mapping.xml:4453
#, no-c-format
msgid ""
"The property is backed by one or more columns that are exported as part of "
"automatic schema generation."
msgstr "属性由一个或多个属性组æˆï¼Œå®ƒä½œä¸ºè‡ªåŠ¨æ¨¡å¼ç”Ÿæˆçš„一部分导出。"
#. Tag: para
#: basic_mapping.xml:4458
#, no-c-format
msgid "The property is read-write, not read-only."
msgstr "属性是å¯è¯»å†™çš„,éžåªè¯»çš„。"
#. Tag: para
#: basic_mapping.xml:4462
#, no-c-format
msgid ""
"The <literal>write expression, if specified, must contain exactly "
"one '?' placeholder for the value."
msgstr ""
"如果指定了 <literal>write 表达å¼ï¼Œå®ƒå¿…é¡»åªåŒ…å«ä¸€ä¸ªâ€œ?â€å ä½ç¬¦ã€‚"
#. Tag: title
#: basic_mapping.xml:4467
#, no-c-format
msgid "Auxiliary database objects"
msgstr "辅助数æ®åº“对象(Auxiliary Database Objects) "
#. Tag: para
#: basic_mapping.xml:4469
#, no-c-format
msgid ""
"Auxiliary database objects allow for the CREATE and DROP of arbitrary "
"database objects. In conjunction with Hibernate's schema evolution tools, "
"they have the ability to fully define a user schema within the Hibernate "
"mapping files. Although designed specifically for creating and dropping "
"things like triggers or stored procedures, any SQL command that can be run "
"via a <literal>java.sql.Statement.execute() method is valid (for "
"example, ALTERs, INSERTS, etc.). There are essentially two modes for "
"defining auxiliary database objects:"
msgstr ""
"å…许 CREATE å’Œ DROP ä»»æ„æ•°æ®åº“对象,与 Hibernate çš„ schema 交互工具组åˆèµ·æ¥ï¼Œ"
"å¯ä»¥æ供在 Hibernate æ˜ å°„æ–‡ä»¶ä¸å®Œå…¨å®šä¹‰ç”¨æˆ· schema 的能力。虽然这是为创建和销"
"æ¯ trigger(触å‘器)或stored procedure(å˜å‚¨è¿‡ç¨‹ï¼‰ç‰ç‰¹åˆ«è®¾è®¡çš„,实际上任何å¯"
"以在 <literal>java.sql.Statement.execute() 方法ä¸æ‰§è¡Œçš„ SQL 命令都"
"å¯ä»¥åœ¨æ¤ä½¿ç”¨ï¼ˆæ¯”如ALTER, INSERT,ç‰ç‰ï¼‰ã€‚本质上有两ç§æ¨¡å¼æ¥å®šä¹‰è¾…助数æ®åº“对"
"象... "
#. Tag: para
#: basic_mapping.xml:4479
#, no-c-format
msgid ""
"The first mode is to explicitly list the CREATE and DROP commands in the "
"mapping file:"
msgstr "第一ç§æ¨¡å¼æ˜¯åœ¨æ˜ 射文件ä¸æ˜¾å¼å£°æ˜Ž CREATE å’Œ DROP 命令: "
#. Tag: programlisting
#: basic_mapping.xml:4482
#, fuzzy, no-c-format
msgid ""
"<hibernate-mapping>\n"
" ...\n"
" <database-object>\n"
" <create>CREATE TRIGGER my_trigger ...</create>\n"
" <drop>DROP TRIGGER my_trigger</drop>\n"
" </database-object>\n"
"</hibernate-mapping>"
msgstr ""
"<hibernate-mapping>\n"
" ...\n"
" <database-object>\n"
" <create>CREATE TRIGGER my_trigger ...</create>\n"
" <drop>DROP TRIGGER my_trigger</drop>\n"
" </database-object>\n"
"</hibernate-mapping>"
#. Tag: para
#: basic_mapping.xml:4484
#, no-c-format
msgid ""
"The second mode is to supply a custom class that constructs the CREATE and "
"DROP commands. This custom class must implement the <literal>org.hibernate."
"mapping.AuxiliaryDatabaseObject</literal> interface."
msgstr ""
"第二ç§æ¨¡å¼æ˜¯æ供一个类,这个类知é“如何组织 CREATE å’Œ DROP 命令。这个特别类必"
"须实现 <literal>org.hibernate.mapping.AuxiliaryDatabaseObject 接"
"å£ã€‚ "
#. Tag: programlisting
#: basic_mapping.xml:4489
#, fuzzy, no-c-format
msgid ""
"<hibernate-mapping>\n"
" ...\n"
" <database-object>\n"
" <definition class=\"MyTriggerDefinition\"/>\n"
" </database-object>\n"
"</hibernate-mapping>"
msgstr ""
"<hibernate-mapping>\n"
" ...\n"
" <database-object>\n"
" <definition class=\"MyTriggerDefinition\"/>\n"
" </database-object>\n"
"</hibernate-mapping>"
#. Tag: para
#: basic_mapping.xml:4491
#, no-c-format
msgid ""
"Additionally, these database objects can be optionally scoped so that they "
"only apply when certain dialects are used."
msgstr "还有,这些数æ®åº“对象å¯ä»¥ç‰¹åˆ«æŒ‡å®šä¸ºä»…在特定的方言ä¸æ‰ä½¿ç”¨ã€‚ "
#. Tag: programlisting
#: basic_mapping.xml:4494
#, fuzzy, no-c-format
msgid ""
"<hibernate-mapping>\n"
" ...\n"
" <database-object>\n"
" <definition class=\"MyTriggerDefinition\"/>\n"
" <dialect-scope name=\"org.hibernate.dialect.Oracle9iDialect\"/"
">\n"
" <dialect-scope name=\"org.hibernate.dialect.Oracle10gDialect\"/"
">\n"
" </database-object>\n"
"</hibernate-mapping>"
msgstr ""
"<hibernate-mapping>\n"
" ...\n"
" <database-object>\n"
" <definition class=\"MyTriggerDefinition\"/>\n"
" <dialect-scope name=\"org.hibernate.dialect.Oracle9Dialect\"/"
">\n"
" <dialect-scope name=\"org.hibernate.dialect.OracleDialect\"/>\n"
" </database-object>\n"
"</hibernate-mapping>"
#~ msgid ""
#~ "The <literal>force attribute is only useful if the table "
#~ "contains rows with \"extra\" discriminator values that are not mapped to "
#~ "a persistent class. This will not usually be the case."
#~ msgstr ""
#~ "<literal>force 属性仅仅在这ç§æƒ…况下有用的:表ä¸åŒ…å«æ²¡æœ‰è¢«æ˜ 射到"
#~ "æŒä¹…åŒ–ç±»çš„é™„åŠ è¾¨åˆ«å™¨å€¼ã€‚è¿™ç§æƒ…况ä¸ä¼šç»å¸¸é‡åˆ°ã€‚ "
#~ msgid "Class"
#~ msgstr "ç±»"
#~ msgid ""
#~ "Use of <literal>select-before-update will usually decrease "
#~ "performance. It is useful to prevent a database update trigger being "
#~ "called unnecessarily if you reattach a graph of detached instances to a "
#~ "<literal>Session."
#~ msgstr ""
#~ "使用 <literal>select-before-update 通常会é™ä½Žæ€§èƒ½ã€‚å¦‚æžœä½ é‡æ–°è¿ž"
#~ "接一个脱管(detached)对象实例 到一个 <literal>Session ä¸æ—¶ï¼Œå®ƒ"
#~ "å¯ä»¥é˜²æ¢æ•°æ®åº“ä¸å¿…è¦çš„è§¦å‘ update。这就很有用了。"
#~ msgid "id"
#~ msgstr "id"
#~ msgid "Generator"
#~ msgstr "Generator"
#~ msgid "<literal>increment"
#~ msgstr "<literal>increment"
#~ msgid "<literal>identity"
#~ msgstr "<literal>identity"
#~ msgid "<literal>sequence"
#~ msgstr "<literal>sequence"
#~ msgid "<literal>seqhilo"
#~ msgstr "<literal>seqhilo"
#~ msgid "<literal>uuid"
#~ msgstr "<literal>uuid"
#~ msgid ""
#~ "uses a 128-bit UUID algorithm to generate identifiers of type string that "
#~ "are unique within a network (the IP address is used). The UUID is encoded "
#~ "as a string of 32 hexadecimal digits in length."
#~ msgstr ""
#~ "用一个 128-bit çš„ UUID 算法生æˆå—ç¬¦ä¸²ç±»åž‹çš„æ ‡è¯†ç¬¦ï¼Œè¿™åœ¨ä¸€ä¸ªç½‘ç»œä¸æ˜¯å”¯ä¸€çš„"
#~ "(使用了 IP 地å€ï¼‰ã€‚UUID 被编ç 为一个 32 ä½ 16 进制数å—çš„å—符串。 "
#~ msgid "<literal>guid"
#~ msgstr "<literal>guid"
#~ msgid "<literal>native"
#~ msgstr "<literal>native"
#~ msgid "<literal>select"
#~ msgstr "<literal>select"
#~ msgid "<literal>foreign"
#~ msgstr "<literal>foreign"
#~ msgid ""
#~ "<literal>optimizer (optional - defaults to none(å¯é€‰ — 默认是none ):请å‚"
#~ "考 <xref linkend=\"mapping-declaration-id-enhanced-optimizers\" />。"
#~ msgid "composite-id"
#~ msgstr "composite-id"
#~ msgid ""
#~ "A table with a composite key can be mapped with multiple properties of "
#~ "the class as identifier properties. The <literal><composite-id><key-property> property "
#~ "mappings and <literal><key-many-to-one> mappings as child "
#~ "elements."
#~ msgstr ""
#~ "如果表使用è”åˆä¸»é”®ï¼Œä½ å¯ä»¥æ˜ å°„ç±»çš„å¤šä¸ªå±žæ€§ä¸ºæ ‡è¯†ç¬¦å±žæ€§ã€‚<literal><"
#~ "composite-id></literal> å…ƒç´ æŽ¥å— <key-property><key-many-to-one> å±žæ€§æ˜ å°„ä½œ"
#~ "为åå…ƒç´ ã€‚ "
#~ msgid ""
#~ "The persistent class <emphasis>must override equals()"
#~ "</literal> and hashCode() to implement composite "
#~ "identifier equality. It must also implement <literal>Serializable覆盖 equals() 和 "
#~ "<literal>hashCode() 方法,æ¥å®žçŽ°ç»„åˆçš„æ ‡è¯†ç¬¦çš„ç›¸ç‰åˆ¤æ–。实现 "
#~ "<literal>Serializable 接å£ä¹Ÿæ˜¯å¿…须的。"
#~ msgid ""
#~ "Unfortunately, this approach means that a persistent object is its own "
#~ "identifier. There is no convenient \"handle\" other than the object "
#~ "itself. You must instantiate an instance of the persistent class itself "
#~ "and populate its identifier properties before you can <literal>load() composite identifier, and "
#~ "discourage it for serious applications."
#~ msgstr ""
#~ "ä¸å¹¸çš„是,这ç§ç»„åˆå…³é”®å—的方法æ„味ç€ä¸€ä¸ªæŒä¹…åŒ–ç±»æ˜¯å®ƒè‡ªå·±çš„æ ‡è¯†ã€‚é™¤äº†å¯¹è±¡è‡ª"
#~ "己之外,没有什么方便的“把手â€å¯ç”¨ã€‚ä½ å¿…é¡»åˆå§‹åŒ–æŒä¹…åŒ–ç±»çš„å®žä¾‹ï¼Œå¡«å……å®ƒçš„æ ‡è¯†"
#~ "ç¬¦å±žæ€§ï¼Œå† <literal>load() 组åˆå…³é”®å—å…³è”çš„æŒä¹…状æ€ã€‚我们把这ç§"
#~ "方法称为 <emphasis>embedded(嵌入å¼ï¼‰çš„组åˆæ ‡è¯†ç¬¦ï¼Œåœ¨é‡è¦çš„应用"
#~ "ä¸ä¸é¼“励使用这ç§ç”¨æ³•ã€‚ "
#~ msgid ""
#~ "A second approach is what we call a <emphasis>mapped composite "
#~ "identifier, where the identifier properties named inside the <literal><"
#~ "composite-id></literal> element are duplicated on both the persistent "
#~ "class and a separate identifier class."
#~ msgstr ""
#~ "第二ç§æ–¹æ³•æˆ‘们称为 <emphasis>mappedï¼ˆæ˜ å°„å¼ï¼‰ç»„åˆæ ‡è¯†ç¬¦"
#~ "(mapped composite identifier),<literal><composite-id> "
#~ "å…ƒç´ ä¸åˆ—å‡ºçš„æ ‡è¯†å±žæ€§ä¸ä½†åœ¨æŒä¹…化类出现,还形æˆä¸€ä¸ªç‹¬ç«‹çš„æ ‡è¯†ç¬¦ç±»ã€‚"
#~ msgid ""
#~ "In this example, both the composite identifier class, "
#~ "<literal>MedicareId, and the entity class itself have "
#~ "properties named <literal>medicareNumber and "
#~ "<literal>dependent. The identifier class must override "
#~ "<literal>equals() and hashCode() and "
#~ "implement <literal>Serializable. The main disadvantage of this "
#~ "approach is code duplication."
#~ msgstr ""
#~ "在这个例åä¸ï¼Œç»„åˆæ ‡è¯†ç¬¦ç±» <literal>MedicareId 和实体类都å«æœ‰ "
#~ "<literal>medicareNumber å’Œ dependent å±žæ€§ã€‚æ ‡"
#~ "识符类必须é‡è½½ <literal>equals() å’Œ hashCode()Serializable 接å£ã€‚è¿™ç§æ–¹æ³•çš„缺点是出"
#~ "现了明显的代ç é‡å¤ã€‚"
#~ msgid ""
#~ "The following attributes are used to specify a mapped composite "
#~ "identifier:"
#~ msgstr "下é¢åˆ—出的属性是用æ¥æŒ‡å®šä¸€ä¸ªæ˜ å°„å¼ç»„åˆæ ‡è¯†ç¬¦çš„:"
#~ msgid ""
#~ "<literal>mapped (optional - defaults to false(å¯é€‰ï¼Œé»˜è®¤ä¸º false ):指明使"
#~ "ç”¨ä¸€ä¸ªæ˜ å°„å¼ç»„åˆæ ‡è¯†ç¬¦ï¼Œå…¶åŒ…å«çš„å±žæ€§æ˜ å°„åŒæ—¶åœ¨å®žä½“类和组åˆæ ‡è¯†ç¬¦ç±»ä¸å‡º"
#~ "现。 "
#~ msgid ""
#~ "<literal>class (optional - but required for a mapped composite "
#~ "identifier): the class used as a composite identifier."
#~ msgstr ""
#~ "<literal>class(å¯é€‰,ä½†å¯¹æ˜ å°„å¼ç»„åˆæ ‡è¯†ç¬¦å¿…须指定):作为组åˆæ ‡"
#~ "识符类使用的类å。"
#~ msgid ""
#~ "We will describe a third, even more convenient approach, where the "
#~ "composite identifier is implemented as a component class in <xref linkend="
#~ "\"components-compositeid\" />. The attributes described below apply only "
#~ "to this alternative approach:"
#~ msgstr ""
#~ "在 <xref linkend=\"components-compositeid\"/> 一节ä¸,我们会æ述第三ç§æ–¹å¼,"
#~ "那就是把组åˆæ ‡è¯†ç¬¦å®žçŽ°ä¸ºä¸€ä¸ªç»„件(component)类,这是更方便的方法。下é¢çš„属"
#~ "性仅对第三ç§æ–¹æ³•æœ‰æ•ˆï¼š "
#~ msgid ""
#~ "<literal>name (optional - required for this approach): a "
#~ "property of component type that holds the composite identifier. Please "
#~ "see chapter 9 for more information."
#~ msgstr ""
#~ "<literal>name(å¯é€‰,但对这ç§æ–¹æ³•è€Œè¨€å¿…须):包å«æ¤ç»„ä»¶æ ‡è¯†ç¬¦çš„ç»„"
#~ "件类型的åå—(å‚阅第 9 ç« ï¼‰ã€‚"
#~ msgid ""
#~ "<literal>class (optional - defaults to the property type "
#~ "determined by reflection): the component class used as a composite "
#~ "identifier. Please see the next section for more information."
#~ msgstr ""
#~ "<literal>class(å¯é€‰ — 默认会用åå°„æ¥è‡ªåŠ¨åˆ¤å®šå±žæ€§ç±»åž‹ ):用æ¥ä½œ"
#~ "为组åˆæ ‡è¯†ç¬¦çš„组件类的类å(å‚阅下一节)。 "
#~ msgid ""
#~ "The third approach, an <emphasis>identifier component, is "
#~ "recommended for almost all applications."
#~ msgstr ""
#~ "第三ç§æ–¹å¼ï¼Œè¢«ç§°ä¸º <emphasis>identifier componentï¼ˆæ ‡è¯†ç¬¦ç»„ä»¶ï¼‰"
#~ "æ˜¯æˆ‘ä»¬å¯¹å‡ ä¹Žæ‰€æœ‰åº”ç”¨éƒ½æŽ¨è使用的方å¼ã€‚ "
#~ msgid "Version (optional)"
#~ msgstr "版本(version)(å¯é€‰ï¼‰ "
#~ msgid ""
#~ "The <literal><version> element is optional and indicates "
#~ "that the table contains versioned data. This is particularly useful if "
#~ "you plan to use <emphasis>long transactions. See below for "
#~ "more information:"
#~ msgstr ""
#~ "<literal><version> å…ƒç´ æ˜¯å¯é€‰çš„,表明表ä¸åŒ…å«é™„带版本信æ¯"
#~ "çš„æ•°æ®ã€‚è¿™åœ¨ä½ å‡†å¤‡ä½¿ç”¨<emphasis> 长事务(long transactions)的"
#~ "时候特别有用。下é¢æ˜¯æ›´å¤šä¿¡æ¯ï¼š"
#~ msgid ""
#~ "Version numbers can be of Hibernate type <literal>long, "
#~ "<literal>integer, short , timestampcalendar ."
#~ msgstr ""
#~ "版本å·å¿…须是以下类型:<literal>longã€integershort ã€timestamp 或者 "
#~ "<literal>calendar。"
#~ msgid "Many-to-one"
#~ msgstr "多对一(many-to-one) "
#~ msgid ""
#~ "An ordinary association to another persistent class is declared using a "
#~ "<literal>many-to-one element. The relational model is a many-to-"
#~ "one association; a foreign key in one table is referencing the primary "
#~ "key column(s) of the target table."
#~ msgstr ""
#~ "通过 <literal>many-to-one å…ƒç´ ,å¯ä»¥å®šä¹‰ä¸€ç§å¸¸è§çš„与å¦ä¸€ä¸ªæŒä¹…化"
#~ "类的关è”。这ç§å…³ç³»æ¨¡åž‹æ˜¯å¤šå¯¹ä¸€å…³è”(实际上是一个对象引用ï¼è¯‘注):这个表的"
#~ "ä¸€ä¸ªå¤–é”®å¼•ç”¨ç›®æ ‡è¡¨çš„ä¸»é”®å—段。 "
#~ msgid "One-to-one"
#~ msgstr "一对一 "
#~ msgid "There are two varieties of one-to-one associations:"
#~ msgstr "有两ç§ä¸åŒçš„一对一关è”: "
#~ msgid "primary key associations"
#~ msgstr "主键关è”"
#~ msgid ""
#~ "Alternatively, a foreign key with a unique constraint, from "
#~ "<literal>Employee to Person , can be "
#~ "expressed as:"
#~ msgstr ""
#~ "å¦ä¸€ç§æ–¹å¼æ˜¯ä¸€ä¸ªå¤–键和一个惟一关键å—对应,上é¢çš„ <literal>EmployeePerson 的例å,如果使用这ç§å…³è”æ–¹å¼ï¼Œå¯ä»¥"
#~ "表达æˆï¼š "
#~ msgid ""
#~ "This association can be made bidirectional by adding the following to the "
#~ "<literal>Person mapping:"
#~ msgstr ""
#~ "如果在 <literal>Person çš„æ˜ å°„åŠ å…¥ä¸‹é¢å‡ å¥ï¼Œè¿™ç§å…³è”就是åŒå‘的: "
#~ msgid "Component and dynamic-component"
#~ msgstr "组件(component)和动æ€ç»„件(dynamic-component) "
#~ msgid "Subclass"
#~ msgstr "å类(subclass) "
#~ msgid ""
#~ "A discriminator column is not required for this mapping strategy. Each "
#~ "subclass must, however, declare a table column holding the object "
#~ "identifier using the <literal><key> element. The mapping "
#~ "at the start of the chapter would then be re-written as:"
#~ msgstr ""
#~ "è¿™ç§æ˜ å°„ç–ç•¥ä¸éœ€è¦æŒ‡å®šè¾¨åˆ«æ ‡å¿—(discriminator)å—段。但是,æ¯ä¸€ä¸ªå类都必"
#~ "须使用 <literal><key> å…ƒç´ æŒ‡å®šä¸€ä¸ªè¡¨å—段æ¥æŒæœ‰å¯¹è±¡çš„æ ‡è¯†"
#~ "ç¬¦ã€‚æœ¬ç« å¼€å§‹çš„æ˜ å°„å¯ä»¥è¢«ç”¨å¦‚下方å¼é‡å†™ï¼š "
#~ msgid "Union-subclass"
#~ msgstr "è”åˆå类(union-subclass) "
#~ msgid "Join"
#~ msgstr "连接(join) "
#~ msgid ""
#~ "Using the <literal><join> element, it is possible to map "
#~ "properties of one class to several tables that have a one-to-one "
#~ "relationship. For example:"
#~ msgstr ""
#~ "使用 <literal><join> å…ƒç´ ï¼Œå‡è‹¥åœ¨è¡¨ä¹‹é—´å˜åœ¨ä¸€å¯¹ä¸€å…³è”,å¯ä»¥"
#~ "å°†ä¸€ä¸ªç±»çš„å±žæ€§æ˜ å°„åˆ°å¤šå¼ è¡¨ä¸ã€‚ "
#~ msgid "Key"
#~ msgstr "Key"
#~ msgid "Any"
#~ msgstr "Any"
#~ msgid "<literal>class"
#~ msgstr "<literal>class"
#~ msgid "<literal>binary"
#~ msgstr "<literal>binary"
#~ msgid "<literal>text"
#~ msgstr "<literal>text"
#~ msgid "<literal>clob, blob"
#~ msgstr "<literal>clob, blob"
#~ msgid ""
#~ "XML does not suit all users so there are some alternative ways to define "
#~ "O/R mapping metadata in Hibernate."
#~ msgstr ""
#~ "XML 并ä¸é€‚用于所有人, å› æ¤æœ‰å…¶ä»–定义 Hibernate O/R æ˜ å°„å…ƒæ•°æ®ï¼ˆmetadata)"
#~ "的方法。 "
#~ msgid "Using XDoclet markup"
#~ msgstr "使用 XDoclet æ ‡è®°"
#~ msgid ""
#~ "Many Hibernate users prefer to embed mapping information directly in "
#~ "sourcecode using XDoclet <literal>@hibernate.tags. We do not "
#~ "cover this approach in this reference guide since it is considered part "
#~ "of XDoclet. However, we include the following example of the "
#~ "<literal>Cat class with XDoclet mappings:"
#~ msgstr ""
#~ "很多 Hibernate 使用者更喜欢使用 XDoclet<literal>@hibernate.tags "
#~ "å°†æ˜ å°„ä¿¡æ¯ç›´æŽ¥åµŒå…¥åˆ°æºä»£ç ä¸ã€‚我们ä¸ä¼šåœ¨æœ¬æ–‡æ¡£ä¸æ¶‰åŠè¿™ä¸ªæ–¹æ³•ï¼Œå› ä¸ºä¸¥æ ¼è¯´"
#~ "æ¥ï¼Œè¿™å±žäºŽ XDoclet 的一部分。然而,我们包å«äº†å¦‚下使用 XDoclet æ˜ å°„çš„ "
#~ "<literal>Cat 类的例å。 "
#~ msgid ""
#~ "See the Hibernate website for more examples of XDoclet and Hibernate."
#~ msgstr "å‚考 Hibernate 网站更多的 Xdoclet å’Œ Hibernate 的例å。"
#~ msgid "Using JDK 5.0 Annotations"
#~ msgstr "使用 JDK 5.0 的注解(Annotation)"
#~ msgid ""
#~ "JDK 5.0 introduced XDoclet-style annotations at the language level that "
#~ "are type-safe and checked at compile time. This mechanism is more "
#~ "powerful than XDoclet annotations and better supported by tools and IDEs. "
#~ "IntelliJ IDEA, for example, supports auto-completion and syntax "
#~ "highlighting of JDK 5.0 annotations. The new revision of the EJB "
#~ "specification (JSR-220) uses JDK 5.0 annotations as the primary metadata "
#~ "mechanism for entity beans. Hibernate3 implements the "
#~ "<literal>EntityManager of JSR-220 (the persistence API). "
#~ "Support for mapping metadata is available via the <emphasis>Hibernate "
#~ "Annotations</emphasis> package as a separate download. Both EJB3 (JSR-"
#~ "220) and Hibernate3 metadata is supported."
#~ msgstr ""
#~ "JDK 5.0 在è¯è¨€çº§åˆ«å¼•å…¥äº† XDoclet é£Žæ ¼çš„æ ‡æ³¨ï¼Œå¹¶ä¸”æ˜¯ç±»åž‹å®‰å…¨çš„ï¼Œåœ¨ç¼–è¯‘æœŸè¿›"
#~ "行检查。这一机制比 XDoclet 的注解更为强大,有更好的工具和 IDE 支æŒã€‚例如,"
#~ "IntelliJ IDEAï¼Œæ”¯æŒ JDK 5.0 注解的自动完æˆå’Œè¯æ³•é«˜äº® 。EJB 规范的新修订版 "
#~ "(JSR-220) 使用 JDK 5.0 的注解作为entity beans的主è¦å…ƒæ•°æ®ï¼ˆmetadata)机"
#~ "制。Hibernate 3 实现了JSR-220(the persistence API) 的 "
#~ "<literal>EntityManager,支æŒé€šè¿‡ Hibernate "
#~ "Annotations</emphasis> åŒ…å®šä¹‰æ˜ å°„å…ƒæ•°æ®ã€‚这个包作为å•ç‹¬çš„éƒ¨åˆ†ä¸‹è½½ï¼Œæ”¯æŒ "
#~ "EJB3(JSR-220) å’Œ Hibernate3 的元数æ®ã€‚ "
#~ msgid "This is an example of a POJO class annotated as an EJB entity bean:"
#~ msgstr "这是一个被注解为 EJB entity bean çš„ POJO 类的例å"
#~ msgid ""
#~ "Support for JDK 5.0 Annotations (and JSR-220) is currently under "
#~ "development. Please refer to the Hibernate Annotations module for more "
#~ "details."
#~ msgstr ""
#~ "注æ„:对 JDK 5.0 注解(和 JSR-220)支æŒçš„工作ä»ç„¶åœ¨è¿›è¡Œä¸,并未完æˆã€‚更多细"
#~ "节请å‚阅 Hibernate Annotations 模å—。 "
#~ msgid ""
#~ "<![CDATA["
#~ msgstr ""
#~ "<![CDATA["
#~ msgid ""
#~ "<![CDATA["
#~ msgstr ""
#~ "<![CDATA["
#~ msgid ""
#~ "<![CDATA["
#~ msgstr ""
#~ "<![CDATA["
#, fuzzy
#~ msgid ""
#~ "<![CDATA["
#~ msgstr ""
#~ "<many-to-one name=\"person\" class=\"Person\" column=\"PERSON_ID\" "
#~ "unique=\"true\"/>"
#, fuzzy
#~ msgid ""
#~ "<![CDATA["
#~ msgstr ""
#~ "<one-to-one name\"employee\" class=\"Employee\" property-ref=\"person"
#~ "\"/>"
#, fuzzy
#~ msgid ""
#~ "<![CDATA[package eg;\n"
#~ "import java.util.Set;\n"
#~ "import java.util.Date;\n"
#~ "\n"
#~ "/**\n"
#~ " * @hibernate.class\n"
#~ " * table=\"CATS\"\n"
#~ " */\n"
#~ "public class Cat {\n"
#~ " private Long id; // identifier\n"
#~ " private Date birthdate;\n"
#~ " private Cat mother;\n"
#~ " private Set kittens\n"
#~ " private Color color;\n"
#~ " private char sex;\n"
#~ " private float weight;\n"
#~ "\n"
#~ " /*\n"
#~ " * @hibernate.id\n"
#~ " * generator-class=\"native\"\n"
#~ " * column=\"CAT_ID\"\n"
#~ " */\n"
#~ " public Long getId() {\n"
#~ " return id;\n"
#~ " }\n"
#~ " private void setId(Long id) {\n"
#~ " this.id=id;\n"
#~ " }\n"
#~ "\n"
#~ " /**\n"
#~ " * @hibernate.many-to-one\n"
#~ " * column=\"PARENT_ID\"\n"
#~ " */\n"
#~ " public Cat getMother() {\n"
#~ " return mother;\n"
#~ " }\n"
#~ " void setMother(Cat mother) {\n"
#~ " this.mother = mother;\n"
#~ " }\n"
#~ "\n"
#~ " /**\n"
#~ " * @hibernate.property\n"
#~ " * column=\"BIRTH_DATE\"\n"
#~ " */\n"
#~ " public Date getBirthdate() {\n"
#~ " return birthdate;\n"
#~ " }\n"
#~ " void setBirthdate(Date date) {\n"
#~ " birthdate = date;\n"
#~ " }\n"
#~ " /**\n"
#~ " * @hibernate.property\n"
#~ " * column=\"WEIGHT\"\n"
#~ " */\n"
#~ " public float getWeight() {\n"
#~ " return weight;\n"
#~ " }\n"
#~ " void setWeight(float weight) {\n"
#~ " this.weight = weight;\n"
#~ " }\n"
#~ "\n"
#~ " /**\n"
#~ " * @hibernate.property\n"
#~ " * column=\"COLOR\"\n"
#~ " * not-null=\"true\"\n"
#~ " */\n"
#~ " public Color getColor() {\n"
#~ " return color;\n"
#~ " }\n"
#~ " void setColor(Color color) {\n"
#~ " this.color = color;\n"
#~ " }\n"
#~ " /**\n"
#~ " * @hibernate.set\n"
#~ " * inverse=\"true\"\n"
#~ " * order-by=\"BIRTH_DATE\"\n"
#~ " * @hibernate.collection-key\n"
#~ " * column=\"PARENT_ID\"\n"
#~ " * @hibernate.collection-one-to-many\n"
#~ " */\n"
#~ " public Set getKittens() {\n"
#~ " return kittens;\n"
#~ " }\n"
#~ " void setKittens(Set kittens) {\n"
#~ " this.kittens = kittens;\n"
#~ " }\n"
#~ " // addKitten not needed by Hibernate\n"
#~ " public void addKitten(Cat kitten) {\n"
#~ " kittens.add(kitten);\n"
#~ " }\n"
#~ "\n"
#~ " /**\n"
#~ " * @hibernate.property\n"
#~ " * column=\"SEX\"\n"
#~ " * not-null=\"true\"\n"
#~ " * update=\"false\"\n"
#~ " */\n"
#~ " public char getSex() {\n"
#~ " return sex;\n"
#~ " }\n"
#~ " void setSex(char sex) {\n"
#~ " this.sex=sex;\n"
#~ " }\n"
#~ "}]]>"
#~ msgstr ""
#~ "package eg;\n"
#~ "import java.util.Set;\n"
#~ "import java.util.Date;\n"
#~ "\n"
#~ "/**\n"
#~ " * @hibernate.class\n"
#~ " * table=\"CATS\"\n"
#~ " */\n"
#~ "public class Cat {\n"
#~ " private Long id; // identifier\n"
#~ " private Date birthdate;\n"
#~ " private Cat mother;\n"
#~ " private Set kittens\n"
#~ " private Color color;\n"
#~ " private char sex;\n"
#~ " private float weight;\n"
#~ "\n"
#~ " /*\n"
#~ " * @hibernate.id\n"
#~ " * generator-class=\"native\"\n"
#~ " * column=\"CAT_ID\"\n"
#~ " */\n"
#~ " public Long getId() {\n"
#~ " return id;\n"
#~ " }\n"
#~ " private void setId(Long id) {\n"
#~ " this.id=id;\n"
#~ " }\n"
#~ "\n"
#~ " /**\n"
#~ " * @hibernate.many-to-one\n"
#~ " * column=\"PARENT_ID\"\n"
#~ " */\n"
#~ " public Cat getMother() {\n"
#~ " return mother;\n"
#~ " }\n"
#~ " void setMother(Cat mother) {\n"
#~ " this.mother = mother;\n"
#~ " }\n"
#~ "\n"
#~ " /**\n"
#~ " * @hibernate.property\n"
#~ " * column=\"BIRTH_DATE\"\n"
#~ " */\n"
#~ " public Date getBirthdate() {\n"
#~ " return birthdate;\n"
#~ " }\n"
#~ " void setBirthdate(Date date) {\n"
#~ " birthdate = date;\n"
#~ " }\n"
#~ " /**\n"
#~ " * @hibernate.property\n"
#~ " * column=\"WEIGHT\"\n"
#~ " */\n"
#~ " public float getWeight() {\n"
#~ " return weight;\n"
#~ " }\n"
#~ " void setWeight(float weight) {\n"
#~ " this.weight = weight;\n"
#~ " }\n"
#~ "\n"
#~ " /**\n"
#~ " * @hibernate.property\n"
#~ " * column=\"COLOR\"\n"
#~ " * not-null=\"true\"\n"
#~ " */\n"
#~ " public Color getColor() {\n"
#~ " return color;\n"
#~ " }\n"
#~ " void setColor(Color color) {\n"
#~ " this.color = color;\n"
#~ " }\n"
#~ " /**\n"
#~ " * @hibernate.set\n"
#~ " * inverse=\"true\"\n"
#~ " * order-by=\"BIRTH_DATE\"\n"
#~ " * @hibernate.collection-key\n"
#~ " * column=\"PARENT_ID\"\n"
#~ " * @hibernate.collection-one-to-many\n"
#~ " */\n"
#~ " public Set getKittens() {\n"
#~ " return kittens;\n"
#~ " }\n"
#~ " void setKittens(Set kittens) {\n"
#~ " this.kittens = kittens;\n"
#~ " }\n"
#~ " // addKitten not needed by Hibernate\n"
#~ " public void addKitten(Cat kitten) {\n"
#~ " kittens.add(kitten);\n"
#~ " }\n"
#~ "\n"
#~ " /**\n"
#~ " * @hibernate.property\n"
#~ " * column=\"SEX\"\n"
#~ " * not-null=\"true\"\n"
#~ " * update=\"false\"\n"
#~ " */\n"
#~ " public char getSex() {\n"
#~ " return sex;\n"
#~ " }\n"
#~ " void setSex(char sex) {\n"
#~ " this.sex=sex;\n"
#~ " }\n"
#~ "}"
#, fuzzy
#~ msgid ""
#~ "<![CDATA[@Entity(access = AccessType.FIELD)\n"
#~ "public class Customer implements Serializable {\n"
#~ "\n"
#~ " @Id;\n"
#~ " Long id;\n"
#~ "\n"
#~ " String firstName;\n"
#~ " String lastName;\n"
#~ " Date birthday;\n"
#~ "\n"
#~ " @Transient\n"
#~ " Integer age;\n"
#~ "\n"
#~ " @Embedded\n"
#~ " private Address homeAddress;\n"
#~ "\n"
#~ " @OneToMany(cascade=CascadeType.ALL)\n"
#~ " @JoinColumn(name=\"CUSTOMER_ID\")\n"
#~ " Set<Order> orders;\n"
#~ "\n"
#~ " // Getter/setter and business methods\n"
#~ "}]]>"
#~ msgstr ""
#~ "@Entity(access = AccessType.FIELD)\n"
#~ "public class Customer implements Serializable {\n"
#~ "\n"
#~ " @Id;\n"
#~ " Long id;\n"
#~ "\n"
#~ " String firstName;\n"
#~ " String lastName;\n"
#~ " Date birthday;\n"
#~ "\n"
#~ " @Transient\n"
#~ " Integer age;\n"
#~ "\n"
#~ " @Embedded\n"
#~ " private Address homeAddress;\n"
#~ "\n"
#~ " @OneToMany(cascade=CascadeType.ALL)\n"
#~ " @JoinColumn(name=\"CUSTOMER_ID\")\n"
#~ " Set<Order> orders;\n"
#~ "\n"
#~ " // Getter/setter and business methods\n"
#~ "}"
Other Hibernate examples (source code examples)
Here is a short list of links related to this Hibernate basic_mapping.po source code file: