正如主题所说,我希望将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语句错误,如上所述。