我有一个包含质量列表的摘要类。质量包含字符串名称和 int 值。此数据存储在非规范化的数据库结构中,只有一个表,用于摘要和质量。
质量表:
id, somefileds, qualityname1, qualityvalue1, qualityname2, qualityvalue2, qualityname3, qualityvalue3
对于每个质量名称和值对,必须在摘要类中插入一个新的质量对象。
如何在休眠中映射它(xml休眠映射)?
我有一个包含质量列表的摘要类。质量包含字符串名称和 int 值。此数据存储在非规范化的数据库结构中,只有一个表,用于摘要和质量。
id, somefileds, qualityname1, qualityvalue1, qualityname2, qualityvalue2, qualityname3, qualityvalue3
对于每个质量名称和值对,必须在摘要类中插入一个新的质量对象。
如何在休眠中映射它(xml休眠映射)?
目前尚不清楚Quality
必须如何在Summary
持有者类中“插入”对象,但我认为自定义用户类型(或者o.h.u.UserType
或o.h.u.UserCollectionType
)是这里的方法。
请参阅第5.2.3 节。文档中的自定义值类型以获取更多详细信息(关于映射没有太多要说的,只需在映射中指定您的自定义用户类型type
)。
我设法使用自定义 CompositeUserType 实现来修复它。映射文件如下所示:
<property name="qualities" type="com.foo.bar.QualityCompositeUserType">
<column name="linkName1" />
<column name="linkQuality1" />
<column name="linkName2" />
<column name="linkQuality2" />
<column name="linkName3" />
<column name="linkQuality3" />
</property>
CompositeUserType 中的返回类是 List.class,nullSafeSet 方法获取集合作为值参数。这只是从列表中获取值并将它们分配给准备好的语句中的参数的问题。(如果 Qualities 列表中缺少值,则用 null 填充)。
nullSafeGet 方法更简单。我只是创建了一个新的 ArrayList,其中插入了新的 Quality 对象,其中包含来自结果集中的值。
如果有兴趣,我可以添加一个完整的示例。