映射非规范化休眠

时间:2010-04-21 11:43:24

标签: java hibernate orm denormalization hibernate-mapping

我有一个Summary类,其中包含Qualities列表。 Quality包含String名称和int值。此数据存储在非规范化数据库结构中,仅包含一个表,用于汇总和质量。

质量表:

ID, somefileds, qualityname1, qualityvalue1, qualityname2, qualityvalue2, qualityname3, qualityvalue3

对于每个品质名称和&值对,必须在Summary类中插入新的Quality对象。

如何在hibernate(xml hibernate mapping)中映射它?

2 个答案:

答案 0 :(得分:2)

目前尚不清楚Quality持有人类必须如何“插入”Summary个对象,但我认为是自定义用户类型(o.h.u.UserTypeo.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对象。

如果感兴趣,我可以添加一个完整的例子。