| /******************************************************************************* | |
| * Copyright (c) 2008 - 2013 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(); | |
| } |