6.2.5. One-to-many associations
A
one to many association
links the tables of two classes via a foreign key, with no intervening collection table. This mapping loses certain semantics of normal Java collections:
-
An instance of the contained entity class may not belong to more than one instance of the collection
-
An instance of the contained entity class may not appear at more than one value of the collection index
An association from Product
to Part
requires existence of a foreign key column and possibly an index column to the Part
table. A <one-to-many>
tag indicates that this is a one to many association.
<one-to-many
class="ClassName"
not-found="ignore|exception"
entity-name="EntityName"
node="element-name"
embed-xml="true|false"
/>
class
(required): The name of the associated class.
not-found
(optional - defaults to exception
): Specifies how cached identifiers that reference missing rows will be handled: ignore
will treat a missing row as a null association.
entity-name
(optional): The entity name of the associated class, as an alternative to class
.
Notice that the <one-to-many>
element does not need to declare any columns. Nor is it necessary to specify the table
name anywhere.
Very important note:
If the foreign key column of a <one-to-many>
association is declared NOT NULL
, you must declare the <key>
mapping not-null="true"
or
use a bidirectional association
with the collection mapping marked inverse="true"
. See the discussion of bidirectional associations later in this chapter.
This example shows a map of Part
entities by name (where partName
is a persistent property of Part
). Notice the use of a formula-based index.
<map name="parts"
cascade="all">
<key column="productId" not-null="true"/>
<map-key formula="partName"/>
<one-to-many class="Part"/>
</map>