我有一个Summary类,其中包含Qualities列表。 Quality包含String名称和int值。此数据存储在非规范化数据库结构中,仅包含一个表,用于汇总和质量。
ID, somefileds, qualityname1, qualityvalue1, qualityname2, qualityvalue2, qualityname3, qualityvalue3
对于每个品质名称和&值对,必须在Summary类中插入新的Quality对象。
如何在hibernate(xml hibernate mapping)中映射它?
答案 0 :(得分:2)
目前尚不清楚Quality
持有人类必须如何“插入”Summary
个对象,但我认为是自定义用户类型(o.h.u.UserType
或o.h.u.UserCollectionType
)是去这里的方式。
有关详细信息,请参阅文档中的5.2.3. Custom value types部分(没有太多关于映射的内容,只需在映射中将自定义用户类型指定为type
)。
答案 1 :(得分:1)
我设法使用自定义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中的returnedClass是List.class,nullSafeSet方法将集合作为value参数获取。只需从列表中获取值并将它们分配给预准备语句中的参数即可。 (如果在质量列表中缺少值,则填写null。)
nullSafeGet方法更简单。我只是创建一个新的ArrayList,其中插入了来自结果集的值的新Quality对象。
如果感兴趣,我可以添加一个完整的例子。