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 ( &#060;COLUMN expression&#062; {, &#060;COLUMN expression&#062;}... ) * REFERENCES &#060;TABLE identifier&#062; [ * (&#060;COLUMN expression&#062; {, &#060;COLUMN expression&#062;}... ) ] * [ ON UPDATE &#060;referential action&#062; ] * [ ON DELETE &#060;referential action&#062; ] * </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 ""; }