使用Hibernate(JPA)映射HashMap

4

预先阅读:

如何使用Hibernate持久化HashMap

我的问题围绕着我想要用JPA映射的以下结构:

Map<User, List<POJO>>

我的POJO非常简单(没有复合类型等,只有一些基本类型)。

我如何实现链接问题中的建议?我如何仅使用@Lob注释List部分(当我仅注释字段时,我会得到一个类转换错误,因为HashMap无法强制转换为Blob,这是我的问题的根源 - 我不能仅注释映射的值部分)?

我不确定是否需要创建一个实现Serializable的包装类型来包装List,或者仅使用ArrayList就足够了,因为它本身就是可序列化的。无论如何,我都无法成功持久化此Map实例...

顺便说一句,我愿意听取关于以不同方式处理所有这些的建议:我可以将List作为每个用户的类成员,尽管我觉得它不属于那里,因为它不是用户数据(如帐户数据;名称,地址等)。它类似于购买,因此我将它们放在类似于实用程序的类(不属于User类)中,以负责这些购买,以便拥有更模块化的模型。我想听听是否合理的建议。

任何有用的建议都将获得虚构的饼干奖励(并显然会得到赞),它们在非虚构的意义上是无脂肪的。

干杯。


顺便说一下,我很乐意听取关于以不同方式处理这个问题的建议:我可以将List作为每个用户的类成员,但我觉得它不属于那里,因为它不是用户数据(如账户数据;姓名、地址等)。 - jpkroehling
@Mat,我恰好相反,我无法忍受XML映射文件。在没有回复的情况下,我自己解决了这个问题,情况有所改变,我将关闭此问题并在大约10分钟后提出一个新问题(如果您感兴趣)。 - davin
1个回答

2
如果你有一个Map,那么你可能有一个一对多的关系。把你的列表放在User中,并让你的POJO成为实体,不要用@Lob,因为Map可能会出现灾难性问题(哈希值/相等问题),并且不能提供干净的数据库映射。

我最初是这样解决的,使用POJO作为@Embedded而不是实体,虽然思路相同。 - davin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接