/*
 * 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;

The simplest type of mapping to a database column. The Basic annotation can be applied to a persistent property or instance variable of any of the following types: Java primitive types, wrappers of the primitive types, String, java.math.BigInteger, java.math.BigDecimal, java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time, java.sql.Timestamp, byte[], Byte[], char[], Character[], enums, and any other type that implements java.io.Serializable.

The use of the Basic annotation is optional for persistent fields and properties of these types. If the Basic annotation is not specified for such a field or property, the default values of the Basic annotation will apply.

   Example 1:
   @Basic
   protected String name;
Since:Java Persistence 1.0
/** * The simplest type of mapping to a database column. The * <code>Basic</code> annotation can be applied to a persistent * property or instance variable of any of the following types: Java * primitive types, wrappers of the primitive types, <code>String</code>, * <code>java.math.BigInteger</code>, * <code>java.math.BigDecimal</code>, * <code>java.util.Date</code>, * <code>java.util.Calendar</code>, * <code>java.sql.Date</code>, * <code>java.sql.Time</code>, * <code>java.sql.Timestamp</code>, <code>byte[]</code>, <code>Byte[]</code>, * <code>char[]</code>, <code>Character[]</code>, enums, and any other type that * implements <code>java.io.Serializable</code>. * <p> * <p> The use of the <code>Basic</code> annotation is optional for * persistent fields and properties of these types. If the * <code>Basic</code> annotation is not specified for such a field or * property, the default values of the <code>Basic</code> annotation * will apply. * <p> * <pre> * Example 1: * * &#064;Basic * protected String name; * * </pre> * * @since Java Persistence 1.0 */
@Target({FIELD}) @Retention(RUNTIME) public @interface Basic {
(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.
/** * (Optional) Defines whether the value of the field or property should * be lazily loaded or must be eagerly fetched. The <code>EAGER</code> * strategy is a requirement on the persistence provider runtime * that the value must be eagerly fetched. The <code>LAZY</code> * strategy is a hint to the persistence provider runtime. * If not specified, defaults to <code>EAGER</code>. */
FetchType fetch() default EAGER;
(Optional) Defines whether the value of the field or property may be null. This is a hint and is disregarded for primitive types; it may be used in schema generation. If not specified, defaults to true.
/** * (Optional) Defines whether the value of the field or property may be null. * This is a hint and is disregarded for primitive types; it may * be used in schema generation. * If not specified, defaults to <code>true</code>. */
boolean optional() default true; }