/*******************************************************************************
 * Copyright (c) 1998, 2009 Oracle. 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:
 *     dclarke - Java Persistence 2.0 - Proposed Final Draft (March 13, 2009)
 *     		     Specification available from http://jcp.org/en/jsr/detail?id=317
 *
 * Java(TM) Persistence API, Version 2.0 - EARLY ACCESS
 * This is an implementation of an early-draft specification developed under the 
 * Java Community Process (JCP).  The code is untested and presumed not to be a  
 * compatible implementation of JSR 317: Java(TM) Persistence API, Version 2.0.   
 * We encourage you to migrate to an implementation of the Java(TM) Persistence 
 * API, Version 2.0 Specification that has been tested and verified to be compatible 
 * as soon as such an implementation is available, and we encourage you to retain 
 * this notice in any implementation of Java(TM) Persistence API, Version 2.0 
 * Specification that you distribute.
 ******************************************************************************/
package javax.persistence;

import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * The MapKeyJoinColumn annotation is used to specify a mapping to an entity
 * that is a map key. The map key join column is in the collection table, join
 * table, or table of the target entity that is used to represent the map.
 */
@Target( { METHOD, FIELD })
@Retention(RUNTIME)
public @interface MapKeyJoinColumn {
	/**
	 * (Optional) The name of the foreign key column for the map key. The table
	 * in which it is found depends upon the context. If the join is for a map
	 * key for an element collection, the foreign key column is in the
	 * collection table for the map value. If the join is for a map key for a
	 * ManyToMany entity relationship or for a OneToMany entity relationship
	 * using a join table, the foreign key column is in a join table. If the
	 * join is for a OneToMany entity relationship using a foreign key mapping
	 * strategy, the foreign key column for the map key is in the table of the
	 * entity that is the value of the map.
	 */
	String name() default "";

	/**
	 * (Optional) The name of the column referenced by this foreign key column.
	 * The referenced column is in the table of the target entity.
	 */
	String referencedColumnName() default "";

	/**
	 * (Optional) The name of the column referenced by this foreign key column.
	 * The referenced column is in the table of the target entity.
	 */
	boolean unique() default false;

	/**
	 * (Optional) Whether the foreign key column is nullable.
	 */
	boolean nullable() default false;

	/**
	 * (Optional) Whether the column is included in SQL INSERT statements
	 * generated by the persistence provider.
	 */
	boolean insertable() default true;

	/**
	 * (Optional) Whether the column is included in SQL UPDATE statements
	 * generated by the persistence provider.
	 */
	boolean updatable() default true;

	/**
	 * (Optional) The SQL fragment that is used when generating the DDL for the
	 * column.
	 */
	String columnDefinition() default "";

	/**
	 * (Optional) The name of the table that contains the foreign key column. If
	 * the join is for a map key for an element collection, the foreign key
	 * column is in the collection table for the map value. If the join is for a
	 * map key for a ManyToMany entity relationship or for a OneToMany entity
	 * relationship using a join table, the foreign key column is in a join
	 * table. If the join is for a OneToMany entity relationship using a foreign
	 * key mapping strategy, the foreign key column for the map key is in the
	 * table of the entity that is the value of the map.
	 */
	String table() default "";
}