Top Description Methods
org.hibernate.dialect.unique

public Interface UniqueDelegate

Known Direct Implementers
org.hibernate.dialect.SpannerDialect.DoNothingUniqueDelegate, org.hibernate.dialect.unique.AlterTableUniqueDelegate
Imports
org.hibernate.boot.Metadata, org.hibernate.boot.model.relational.SqlStringGenerationContext, org.hibernate.mapping.Column, .Table, .UniqueKey

Dialect-level delegate responsible for applying unique constraints in DDL. Uniqueness can be specified in any of three ways:
  1. For single-column constraints, by adding unique to the column definition. See getColumnDefinitionUniquenessFragment
  2. By inclusion of the unique constraint in the create table statement. See getTableCreationUniqueConstraintsFragment
  3. By creation of a unique constraint using separate alter table statements. See getAlterTableToAddUniqueKeyCommand. Also, see getAlterTableToDropUniqueKeyCommand.
The first two options are generally preferred, and so we use CreateTableUniqueDelegate where possible. However, for databases where unique constraints may not contain a nullable column, and unique indexes must be used instead, we use AlterTableUniqueIndexDelegate.

Hibernate specifies that a unique constraint on a nullable column considers null values to be distinct. Some databases default to the opposite semantic, where null values are considered equal for the purpose of determining uniqueness. This is almost never useful, and is the opposite of what we want when we use a unique constraint on a foreign key to map an optional org.hibernate.mapping.OneToOne association. Therefore, our UniqueDelegates must jump through hoops to emulate the sensible semantics specified by ANSI, Hibernate, and common sense, namely, that two null values are distinct. A particularly egregious offender is Sybase, where we must simply skip creating the unique constraint.

Author
Brett Meyer

Method Summary

Modifier and TypeMethod and Description
public String

Returns:

The alter table command
getAlterTableToAddUniqueKeyCommand
(UniqueKey
The UniqueKey instance. Contains all information about the columns
uniqueKey
,
Metadata
Access to the bootstrap mapping information
metadata
,
SqlStringGenerationContext
A context for SQL string generation
context
)

Deprecated as a consequence of Metadata being deprecated.
Get the alter table command used to create the given unique key constraint, or return the empty string if the constraint was already included in the create table statement by getTableCreationUniqueConstraintsFragment.
public String

Returns:

The alter table command
getAlterTableToDropUniqueKeyCommand
(UniqueKey
The UniqueKey instance. Contains all information about the columns
uniqueKey
,
Metadata
Access to the bootstrap mapping information
metadata
,
SqlStringGenerationContext
A context for SQL string generation
context
)

Deprecated as a consequence of Metadata being deprecated.
Get the alter table command used to drop the given unique key which was previously created by getAlterTableToAddUniqueKeyCommand.
public String

Returns:

The fragment (usually "unique"), empty string indicates the uniqueness will be indicated using a different approach
getColumnDefinitionUniquenessFragment
(Column
The column to which to apply the unique
column
,
SqlStringGenerationContext
A context for SQL string generation
context
)

Get the SQL fragment used to make the given column unique as part of its column definition, usually just " unique", or return an empty string if uniqueness does not belong in the column definition.

public String

Returns:

The fragment, typically in the form ", unique(col1, col2), unique(col20)". The leading comma is important!
getTableCreationUniqueConstraintsFragment
(Table
The table for which to generate the unique constraints fragment
table
,
SqlStringGenerationContext
A context for SQL string generation
context
)

Get the SQL fragment used to specify the unique constraints on the given table as part of the create table command, with a leading comma, usually something like:

, unique(x,y), constraint abc unique(a,b,c)

Method Detail

getAlterTableToAddUniqueKeyCommandback to summary
public String getAlterTableToAddUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata, SqlStringGenerationContext context)

Deprecated

as a consequence of Metadata being deprecated. See corresponding docs for further information.

Get the alter table command used to create the given unique key constraint, or return the empty string if the constraint was already included in the create table statement by getTableCreationUniqueConstraintsFragment.

Parameters
uniqueKey:UniqueKey

The UniqueKey instance. Contains all information about the columns

metadata:Metadata

Access to the bootstrap mapping information

context:SqlStringGenerationContext

A context for SQL string generation

Returns:String

The alter table command

getAlterTableToDropUniqueKeyCommandback to summary
public String getAlterTableToDropUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata, SqlStringGenerationContext context)

Deprecated

as a consequence of Metadata being deprecated. See corresponding docs for further information.

Get the alter table command used to drop the given unique key which was previously created by getAlterTableToAddUniqueKeyCommand.

Parameters
uniqueKey:UniqueKey

The UniqueKey instance. Contains all information about the columns

metadata:Metadata

Access to the bootstrap mapping information

context:SqlStringGenerationContext

A context for SQL string generation

Returns:String

The alter table command

getColumnDefinitionUniquenessFragmentback to summary
public String getColumnDefinitionUniquenessFragment(Column column, SqlStringGenerationContext context)

Get the SQL fragment used to make the given column unique as part of its column definition, usually just " unique", or return an empty string if uniqueness does not belong in the column definition.

This is for handling single columns explicitly marked unique, not for dealing with unique keys.

Parameters
column:Column

The column to which to apply the unique

context:SqlStringGenerationContext

A context for SQL string generation

Returns:String

The fragment (usually "unique"), empty string indicates the uniqueness will be indicated using a different approach

getTableCreationUniqueConstraintsFragmentback to summary
public String getTableCreationUniqueConstraintsFragment(Table table, SqlStringGenerationContext context)

Get the SQL fragment used to specify the unique constraints on the given table as part of the create table command, with a leading comma, usually something like:

, unique(x,y), constraint abc unique(a,b,c)

or return an empty string if there are no unique constraints or if the unique constraints do not belong in the table definition.

The implementation should iterate over the unique keys of the given table by calling org.hibernate.mapping.Table#getUniqueKeys() and generate a fragment which includes all the unique key declarations.

Parameters
table:Table

The table for which to generate the unique constraints fragment

context:SqlStringGenerationContext

A context for SQL string generation

Returns:String

The fragment, typically in the form ", unique(col1, col2), unique(col20)". The leading comma is important!