/*
 * 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.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

Specifies the type of the map key for associations of type java.util.Map. The map key can be a basic type, an embeddable class, or an entity. If the map is specified using Java generics, the MapKeyClass annotation and associated type need not be specified; otherwise they must be specified.

The MapKeyClass annotation is used in conjunction with ElementCollection or one of the collection-valued relationship annotations (OneToMany or ManyToMany). The MapKey annotation is not used when MapKeyClass is specified and vice versa.

   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;
    }
See Also:
Since:Java Persistence 2.0
/** * 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. * <p> * <pre> * * Example 1: * * &#064;Entity * public class Item { * &#064;Id int id; * ... * &#064;ElementCollection(targetClass=String.class) * &#064;MapKeyClass(String.class) * Map images; // map from image name to image filename * ... * } * * Example 2: * * // MapKeyClass and target type of relationship can be defaulted * * &#064;Entity * public class Item { * &#064;Id int id; * ... * &#064;ElementCollection * Map&#060;String, String&#062; images; * ... * } * * Example 3: * * &#064;Entity * public class Company { * &#064;Id int id; * ... * &#064;OneToMany(targetEntity=com.example.VicePresident.class) * &#064;MapKeyClass(com.example.Division.class) * Map organization; * } * * Example 4: * * // MapKeyClass and target type of relationship are defaulted * * &#064;Entity * public class Company { * &#064;Id int id; * ... * &#064;OneToMany * Map&#060;Division, VicePresident&#062; 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.
Returns:The type
/** * (Required) The type of the map key. * * @return The type */
Class value(); }