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 JPA, 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
JPA 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 these properties:
String name
: The name of the constraint. OpenJPA will choose
a name if you do not provide one, or will create an anonymous constraint.
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 constraint's
columns.
Example 13.2. Defining a Unique Constraint
The following defines a unique constraint on the TITLE
column of the ART
table:
@Entity @Table(name="ART", uniqueConstraints=@UniqueConstraint(name="TITLE_CNSTR", columnNames="TITLE")) public class Article { ... }
The same metadata expressed in XML form:
<entity class="org.mag.Article"> <table name="ART"> <unique-constraint> <name>TITLE_CNSTR</name> <column-name>TITLE</column-name> </unique-constraint> </table> ... </entity>