Unique constraints ensure that the data in a column or combination of
columns is unique for each row. A table's primary key, for example,
functions as an implicit unique constraint. In EJB persistence, you
represent other unique constraints with an array of
UniqueConstraint
annotations within the table annotation.
The unique constraints you define are used during table creation to
generate the proper database constraints, and may also be used at
runtime to order INSERT
, UPDATE
,
and DELETE
statements. For example, suppose there
is a unique constraint on the columns of field F
.
In the same transaction, you remove an object A
and persist a new object B
, both with the same
F
value. The EJB persistence runtime must ensure
that the SQL deleting A
is sent to the database
before the SQL inserting B
to avoid a unique
constraint violation.
UniqueConstraint
has a single property:
String[] columnNames
: The names of the
columns the constraint spans.
In XML, unique constraints are represented by nesting
unique-constraint
elements within the
table
element. Each unique-constraint
element in turn nests column-name
text elements
to enumerate the contraint's columns.
Example 12.2. Defining a Unique Constraint
The following defines a unique constraint on the
TITLE
column of the ART
table:
@Entity @Table(name="ART", uniqueConstraints=@Unique(columnNames="TITLE")) public class Article { ... }
The same metadata expressed in XML form:
<entity class="org.mag.Article"> <table name="ART"> <unique-constraint> <column-name>TITLE</column-name> </unique-constraint> </table> ... </entity>