/******************************************************************************* | |
* Copyright (c) 2008 - 2012 Oracle Corporation. 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: | |
* Linda DeMichiel - Java Persistence 2.1 | |
* Linda DeMichiel - Java Persistence 2.0 | |
* | |
******************************************************************************/ | |
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; | |
/** | |
* Specifies the type of the map key for associations of type | |
* <code>java.util.Map</code>. The map key can be a basic type, an | |
* embeddable class, or an entity. If the map is specified using Java | |
* generics, the <code>MapKeyClass</code> annotation and associated | |
* type need not be specified; otherwise they must be specified. | |
* | |
* <p> The <code>MapKeyClass</code> annotation is used in conjunction | |
* with <code>ElementCollection</code> or one of the collection-valued | |
* relationship annotations (<code>OneToMany</code> or <code>ManyToMany</code>). | |
* The <code>MapKey</code> annotation is not used when | |
* <code>MapKeyClass</code> is specified and vice versa. | |
* | |
* <pre> | |
* | |
* Example 1: | |
* | |
* @Entity | |
* public class Item { | |
* @Id int id; | |
* ... | |
* @ElementCollection(targetClass=String.class) | |
* @MapKeyClass(String.class) | |
* Map images; // map from image name to image filename | |
* ... | |
* } | |
* | |
* Example 2: | |
* | |
* // MapKeyClass and target type of relationship can be defaulted | |
* | |
* @Entity | |
* public class Item { | |
* @Id int id; | |
* ... | |
* @ElementCollection | |
* Map<String, String> images; | |
* ... | |
* } | |
* | |
* Example 3: | |
* | |
* @Entity | |
* public class Company { | |
* @Id int id; | |
* ... | |
* @OneToMany(targetEntity=com.example.VicePresident.class) | |
* @MapKeyClass(com.example.Division.class) | |
* Map organization; | |
* } | |
* | |
* Example 4: | |
* | |
* // MapKeyClass and target type of relationship are defaulted | |
* | |
* @Entity | |
* public class Company { | |
* @Id int id; | |
* ... | |
* @OneToMany | |
* Map<Division, VicePresident> organization; | |
* } | |
* | |
* </pre> | |
* @see ElementCollection | |
* @see OneToMany | |
* @see ManyToMany | |
* @since Java Persistence 2.0 | |
*/ | |
@Target( { METHOD, FIELD }) | |
@Retention(RUNTIME) | |
public @interface MapKeyClass { | |
/**(Required) The type of the map key.*/ | |
Class value(); | |
} |