一尘不染

您如何使用注释在休眠模式下映射“地图”?

hibernate

使用注释如何将实体中的字段映射为给定对象,该实体是String的“映射”(哈希表)?该对象带有注释,并且其实例已存储在hibernate数据库中。

我发现了使用简单的键和值来定义地图的语法:

<class name="Foo" table="foo">
    ...
    <map role="ages">
         <key column="id"/>
         <index column="name" type="string"/>
         <element column="age" type="string"/>
     </map>
 </class>

奇怪的是,实体是键,而简单类型是值,像这样:

<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>

但是我看不到如何为元素映射的简单键做到这一点,也看不到如何使用注释来做到这一点。


阅读 232

收藏
2020-06-20

共1个答案

一尘不染

您可以简单地使用 JPA批注 @MapKey(请注意,JPA批注与Hibernate的批注不同,Hibernate
@MapKey映射包含映射键的数据库列,而JPA的批注将属性用作映射的键​​)。

@javax.persistence.OneToMany(cascade = CascadeType.ALL)
@javax.persistence.MapKey(name = "name")
private Map<String, Person> nameToPerson = new HashMap<String, Person>();
2020-06-20