//$Id: SecondaryTable.java 11282 2007-03-14 22:05:59Z epbernard $
//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
package javax.persistence;

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

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;

/**
 * This annotation is used to specify a secondary table for the annotated entity class. Specifying
 * one or more secondary tables indicates that the data for the entity class is stored across multiple
 * tables.
 *
 * If no SecondaryTable annotation is specified, it is assumed that all persistent fields or properties
 * of the entity are mapped to the primary table. If no primary key join columns are specified, the
 * join columns are assumed to reference the primary key columns of the primary table, and have the
 * same names and types as the referenced primary key columns of the primary table.
 *
 * @author Emmanuel Bernard
 */
@Target({TYPE}) @Retention(RUNTIME)
public @interface SecondaryTable {
	/**
	 * The name of the table
	 */
	String name();
	/**
	 * The catalog of the table
	 */
	String catalog() default "";
	/**
	 * The schema of the table
	 */
	String schema() default "";
	/**
	 * The columns that are used to join with the primary table.
	 *
	 * Defaults to the column(s) of the same name(s) as the primary key column(s)
	 * in the primary table
	 */
	PrimaryKeyJoinColumn[] pkJoinColumns() default {};
	/**
	 * Unique constraints that are to be placed on the table. These are typically only used if
	 * table generation is in effect. These constraints apply in addition to any constraints
	 * specified by the Column and JoinColumn annotations and constraints entailed by primary
	 * key mappings.
	 *
	 * Defaults to no additional constraints.
	 */
	UniqueConstraint[] uniqueConstraints() default {};
}
