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>