如何使用List将HashMap映射为Hibernate中的值

时间:2014-02-25 12:56:49

标签: java hibernate list hashmap

正如主题所说,我希望将HashMap映射为一个List作为Hibernate中的值。 由于在Hibernate中看起来不可能将集合作为元素放在地图中,所以我创建了一个包含Ids列表的类。

我的HashMap看起来像这样:

Map<Status, IdList> statusIdsMap = new HashMap<Status, IdList>();

状态是插入/更新/删除。 IdList包含一个ID列表。

Hibernate映射如下所示:

<id name="id" type="IdType" />
...
<map name="statusIdMap">
   <key column="id" />
   <map-key type="Status" column="StatusCode" />
   <element type="IdList" />
</map>
...
<class name="IdList" select-before-update="true" table="IdList">
    <id name="id" column="id" unsaved-value="null">
        <generator class="IdGenerator"/>
    </id>
    <set name="Ids" table="IdsForStatus">
        <key column="id"/>
        <element column="updatedId" type="IdType"/>
    </set>
</class>

如果我尝试使用statusIdMap存储类,Hibernate会生成一个Insert SQL,它试图将IdList类放在一列中,而不是将Id放到IdList类中。 Hibernate错误消息显示“预期数量,得到二进制”。

这是与此相关的问题 Hibernate(JPA) mapping a HashMap 答案建议把列表放在Key类中,但这不是我想做的事情。

还有其他建议吗?

编辑: 简而言之,测试确实如下:

使用虚拟值填充对象,包括地图 初始化休眠并启动事务
插入对象
提交事务并关闭hibernate会话

尝试提交时,错误消息来自数据库,因为生成的insert语句错误,如上所述。

0 个答案:

没有答案