All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javax.persistence.OneToOne Maven / Gradle / Ivy

There is a newer version: 3.0
Show newest version
/*
 * Copyright (c) 2008, 2009, 2011 Oracle, Inc. 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.
 */
package javax.persistence;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import static javax.persistence.FetchType.EAGER;

/**
 * Defines a single-valued association to another entity that has one-to-one multiplicity. It is not normally
 * necessary to specify the associated target entity explicitly since it can usually be inferred from the type
 * of the object being referenced. If the relationship is bidirectional, the non-owning side must use the
 * mappedBy element of the OneToOne annotation to specify the relationship field or
 * property of the owning side.
 * 

* The OneToOne annotation may be used within an embeddable class to specify a relationship from * the embeddable class to an entity class. If the relationship is bidirectional and the entity containing the * embeddable class is on the owning side of the relationship, the non-owning side must use the * mappedBy element of the OneToOne annotation to specify the relationship field or * property of the embeddable class. The dot (".") notation syntax must be used in the mappedBy * element to indicate the relationship attribute within the embedded attribute. The value of each identifier * used with the dot notation is the name of the respective embedded field or property. *

*

 *    Example 1: One-to-one association that maps a foreign key column
 *
 *    // On Customer class:
 *
 *    @OneToOne(optional=false)
 *    @JoinColumn(
 *    	name="CUSTREC_ID", unique=true, nullable=false, updatable=false)
 *    CustomerRecord customerRecord;
 *
 *    // On CustomerRecord class:
 *
 *    @OneToOne(optional=false, mappedBy="customerRecord")
 *    Customer customer;
 *
 *
 *    Example 2: One-to-one association that assumes both the source and target share the same primary key values.
 *
 *    // On Employee class:
 *
 *    @Entity
 *    public class Employee {
 *    	@Id Integer id;
 *
 *    	@OneToOne @MapsId
 *    	EmployeeInfo info;
 *    	...
 *    }
 *
 *    // On EmployeeInfo class:
 *
 *    @Entity
 *    public class EmployeeInfo {
 *    	@Id Integer id;
 *    	...
 *    }
 *
 *
 *    Example 3: One-to-one association from an embeddable class to another entity.
 *
 *    @Entity
 *    public class Employee {
 *       @Id int id;
 *       @Embedded LocationDetails location;
 *       ...
 *    }
 *
 *    @Embeddable
 *    public class LocationDetails {
 *       int officeNumber;
 *       @OneToOne ParkingSpot parkingSpot;
 *       ...
 *    }
 *
 *    @Entity
 *    public class ParkingSpot {
 *       @Id int id;
 *       String garage;
 *       @OneToOne(mappedBy="location.parkingSpot") Employee assignedTo;
 *        ...
 *    }
 *
 * 
* * @since Java Persistence 1.0 */ @Target({FIELD}) @Retention(RUNTIME) public @interface OneToOne { /** * (Optional) The entity class that is the target of the association. *

* Defaults to the type of the field or property that stores the association. * * @return target entity */ Class targetEntity() default void.class; /** * (Optional) The operations that must be cascaded to the target of the association. *

* By default no operations are cascaded. * * @return cascade type */ CascadeType[] cascade() default {}; /** * (Optional) Whether the association should be lazily loaded or must be eagerly fetched. The EAGER * strategy is a requirement on the persistence provider runtime that the associated entity must be * eagerly fetched. The LAZY strategy is a hint to the persistence provider runtime. * * @return fetch type */ FetchType fetch() default EAGER; /** * (Optional) Whether the association is optional. If set to false then a non-null relationship must * always exist. * * @return optional? */ boolean optional() default true; /** * (Optional) The field that owns the relationship. This element is only specified on the inverse * (non-owning) side of the association. * * @return mappedby */ String mappedBy() default ""; /** * (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. * * @return whether to remove orphans * @since Java Persistence 2.0 */ boolean orphanRemoval() default false; }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy