/******************************************************************************* * Copyright (c) 1998, 2015 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 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: * 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 javax.persistence.CascadeType; import javax.persistence.DiscriminatorColumn; import javax.persistence.FetchType; import static javax.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 {}; }