How do you map a "Map" in hibernate using annotations?
hibernate, java, mapping, orm
Solution
You could simply use the JPA annotation `@MapKey` (note that the JPA annotation is different from the Hibernate one, the Hibernate `@MapKey` maps a database column holding the map key, while the JPA's annotation maps the property to be used as the map's key).
@javax.persistence.OneToMany(cascade = CascadeType.ALL)
@javax.persistence.MapKey(name = "name")
private Map<String, Person> nameToPerson = new HashMap<String, Person>();
Problem
Using annotations how do you map a field in an entity which is a "Map" (Hashtable) of String to a given object? The object is annotated and instances of it are already stored in the hibernate databse. I've found the syntax for definging a map with a simple key and value as such: ``` <class name="Foo" table="foo"> ... <map role="ages"> <key column="id"/> <index column="name" type="string"/> <element column="age" type="string"/> </map> </class> ``` And oddly with an entity as the key and a simple type as the value like so: ``` <class name="Foo" table="foo"> ... <map role="ages"> <key column="id"/> <index-many-to-many column="person_id" class="Person"/> <element column="age" type="string"/> </map> </class> <class name="Person" table="person"> ... <property name="name" column="name" type="string"/> </class> ``` But I don't see how to do this for a simple key to element mapping, and I don't see how to do this using annotations.