/******************************************************************************* * 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 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. */ 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). */ ConstraintMode value() default CONSTRAINT; /** * (Optional) The foreign key constraint definition. */ String foreignKeyDefinition() default ""; }