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
/*******************************************************************************
* 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
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: - ElementCollection
- OneToMany
- ManyToMany
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.
*
* <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./**(Required) The type of the map key.*/
Class value();
}