Copyright (c) 2011 - 2017 Oracle Corporation. All rights reserved.
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
which accompanies this distribution.
The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
and the Eclipse Distribution License is available at
http://www.eclipse.org/org/documents/edl-v10.php.
Contributors:
Linda DeMichiel - Java Persistence 2.1
/*******************************************************************************
* Copyright (c) 2011 - 2017 Oracle Corporation. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Linda DeMichiel - Java Persistence 2.1
*
******************************************************************************/
package javax.persistence;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static javax.persistence.ConstraintMode.CONSTRAINT;
Used to specify the handling of foreign key constraints when schema
generation is in effect. If this annotation is not specified, the
persistence provider's default foreign key strategy will be used.
The ConstraintMode
value is used to specify whether foreign
key constraints should be generated.
The syntax used in the foreignKeyDefinition
element
should follow the SQL syntax used by the target database for foreign
key constraints. For example, this may be similar the following:
FOREIGN KEY ( <COLUMN expression> {, <COLUMN expression>}... )
REFERENCES <TABLE identifier> [
(<COLUMN expression> {, <COLUMN expression>}... ) ]
[ ON UPDATE <referential action> ]
[ ON DELETE <referential action> ]
When the ConstraintMode
value is
CONSTRAINT
, but the foreignKeyDefinition
element is not specified, the provider will generate foreign key
constraints whose update and delete actions it determines most
appropriate for the join column(s) to which the foreign key
annotation is applied.
See Also: Since: Java Persistence 2.1
/**
* Used to specify the handling of foreign key constraints when schema
* generation is in effect. If this annotation is not specified, the
* persistence provider's default foreign key strategy will be used.
* <p>
* The <code>ConstraintMode</code> value is used to specify whether foreign
* key constraints should be generated.
* <p>
* The syntax used in the <code>foreignKeyDefinition</code> element
* should follow the SQL syntax used by the target database for foreign
* key constraints. For example, this may be similar the following:
* <pre>
* FOREIGN KEY ( <COLUMN expression> {, <COLUMN expression>}... )
* REFERENCES <TABLE identifier> [
* (<COLUMN expression> {, <COLUMN expression>}... ) ]
* [ ON UPDATE <referential action> ]
* [ ON DELETE <referential action> ]
* </pre>
*
* When the <code>ConstraintMode</code> value is
* <code>CONSTRAINT</code>, but the <code>foreignKeyDefinition</code>
* element is not specified, the provider will generate foreign key
* constraints whose update and delete actions it determines most
* appropriate for the join column(s) to which the foreign key
* annotation is applied.
*
* @see JoinColumn
* @see JoinColumns
* @see MapKeyJoinColumn
* @see MapKeyJoinColumns
* @see PrimaryKeyJoinColumn
* @see JoinTable
* @see CollectionTable
* @see SecondaryTable
* @see AssociationOverride
*
* @since Java Persistence 2.1
*/
@Target({})
@Retention(RUNTIME)
public @interface ForeignKey {
(Optional) The name of the foreign key constraint. If this
is not specified, it defaults to a provider-generated name.
/**
* (Optional) The name of the foreign key constraint. If this
* is not specified, it defaults to a provider-generated name.
*/
String name() default "";
(Optional) Used to specify whether a foreign key constraint should be
generated when schema generation is in effect.
A value of CONSTRAINT
will cause the persistence
provider to generate a foreign key constraint. If the
foreignKeyDefinition
element is not specified, the
provider will generate a constraint whose update
and delete actions it determines most appropriate for the
join column(s) to which the foreign key annotation is applied.
A value of NO_CONSTRAINT
will result in no
constraint being generated.
A value of PROVIDER_DEFAULT
will result in the
provider's default behavior (which may or may not result
in the generation of a constraint for the given join column(s).
/**
* (Optional) Used to specify whether a foreign key constraint should be
* generated when schema generation is in effect.
* <p>
* A value of <code>CONSTRAINT</code> will cause the persistence
* provider to generate a foreign key constraint. If the
* <code>foreignKeyDefinition</code> element is not specified, the
* provider will generate a constraint whose update
* and delete actions it determines most appropriate for the
* join column(s) to which the foreign key annotation is applied.
* <p>
* A value of <code>NO_CONSTRAINT</code> will result in no
* constraint being generated.
* <p>
* A value of <code>PROVIDER_DEFAULT</code> will result in the
* provider's default behavior (which may or may not result
* in the generation of a constraint for the given join column(s).
*/
ConstraintMode value() default CONSTRAINT;
(Optional) The foreign key constraint definition.
/**
* (Optional) The foreign key constraint definition.
*/
String foreignKeyDefinition() default "";
}