blob: eb73d4c49185099eb73206801ea1451037ca2d3c [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// 03/26/2008-1.0M6 Guy Pelletier
// - 211302: Add variable 1-1 mapping support to the EclipseLink-ORM.XML Schema
// 03/27/2009-2.0 Guy Pelletier
// - 241413: JPA 2.0 Add EclipseLink support for Map type attributes
package org.eclipse.persistence.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import jakarta.persistence.CascadeType;
import jakarta.persistence.DiscriminatorColumn;
import jakarta.persistence.FetchType;
import static jakarta.persistence.FetchType.EAGER;
/**
* Variable one to one mappings are used to represent a pointer references
* between a java object and an implementer of an interface. This mapping is
* usually represented by a single pointer (stored in an instance variable)
* between the source and target objects. In the relational database tables,
* these mappings are normally implemented using a foreign key and a type code.
*
* A VariableOneToOne can be specified within an Entity, MappedSuperclass
* and Embeddable class.
*
* @author Guy Pelletier
* @since Eclipselink 1.0
*/
@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface VariableOneToOne {
/**
* (Optional) The interface class that is the target of the association. If
* not specified it will be inferred from the type of the object being
* referenced.
*/
Class<?> targetInterface() default void.class;
/**
* (Optional) The operations that must be cascaded to the target of the
* association.
*/
CascadeType[] cascade() default {};
/**
* (Optional) Defines whether the value of the field or property should
* be lazily loaded or must be eagerly fetched. The EAGER strategy is a
* requirement on the persistence provider runtime that the value must be
* eagerly fetched. The LAZY strategy is a hint to the persistence provider
* runtime. If not specified, defaults to EAGER.
*/
FetchType fetch() default EAGER;
/**
* (Optional) Whether the association is optional. If set to false then a
* non-null relationship must always exist.
*/
boolean optional() default true;
/**
* (Optional) Whether to apply the remove operation to entities that have
* been removed from the relationship and to cascade the remove operation to
* those entities.
*/
boolean orphanRemoval() default false;
/**
* (Optional) The discriminator column will hold the type indicators. If the
* DiscriminatorColumn is not specified, the name of the discriminator
* column defaults to "DTYPE" and the discriminator type to STRING.
*/
DiscriminatorColumn discriminatorColumn() default @DiscriminatorColumn;
/**
* (Optional) The list of discriminator types that can be used with this
* VariableOneToOne. If none are specified then those entities within the
* persistence unit that implement the target interface will be added to
* the list of types. The discriminator type will default as follows:
* - If DiscriminatorColumn type is STRING: Entity.name()
* - If DiscriminatorColumn type is CHAR: First letter of the Entity class
* - If DiscriminatorColumn type is INTEGER: The next integer after the
* highest integer explicitly added.
*/
DiscriminatorClass[] discriminatorClasses() default {};
}