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.
I know this question is very old but maybe this could help someone.
Other posibility is something like that:
That only produces two tables User and Preferences, note that PreferenceKey is unique for a User into a domain
You should probably use a UserType or UserCollectionType. Or, you can use a custom tupleizer.
see hibernate core documentation for the concepts and hibernate annotations documentation for the equivalent annotation approach.
Let me know if that isn't what you are asking for.
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).