映射非规范化休眠
我有一个摘要类,其中包含质量列表。 Quality 包含一个 String 名称和 int 值。此数据存储在非规范化的数据库结构中,仅一个表,用于摘要和质量。
质量表:
id, 一些领域, 质量名称1, 质量值1, 质量名称2, 质量值2, 质量名称3, Qualityvalue3
对于每个质量名称和质量值值对,必须将新的 Quality 对象插入到 Summary 类中。
如何在hibernate中映射它(xml hibernate映射)?
I have a Summary class which contains a list of Qualities. A Quality contains a String name and int value. This data is stored in a denormalized db structure, one table only, for both Summary and Quality.
Quality table:
id,
somefileds,
qualityname1,
qualityvalue1,
qualityname2,
qualityvalue2,
qualityname3,
qualityvalue3
For each quality name & value pairs, a new Quality object must be inserted in the Summary class.
How to map this in hibernate (xml hibernate mapping)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
目前尚不清楚
Quality
对象必须如何“插入”到Summary
持有者类中,但我认为自定义用户类型(ohuUserType
或ohuUserCollectionType
)是这样的去这里。请参阅 5.2 节。 3.文档中的自定义值类型了解更多详细信息(关于映射无需多言,只需在映射中将自定义用户类型指定为
type
即可)。It is not clear how
Quality
objects must be "inserted" in theSummary
holder class but I think that a custom user type (eithero.h.u.UserType
oro.h.u.UserCollectionType
) is the way to go here.Refer to the section 5.2.3. Custom value types in the documentation for more details (there is not much to say about the mapping, simply specify your custom user type as
type
in the mapping).我设法使用自定义 CompositeUserType 实现来修复它。映射文件如下所示:
CompositeUserType 中的返回类是 List.class,nullSafeSet 方法获取集合作为值参数。只需从列表中获取值并将它们分配给准备好的语句中的参数即可。 (如果质量列表中缺少值,则填充 null)。
nullSafeGet 方法更简单。我只是创建一个新的 ArrayList,其中插入新的 Quality 对象以及结果集中的值。
如果有兴趣,我可以添加一个完整的示例。
I managed to fix it with a custom CompositeUserType implementation. The mapping file looks as follows:
The returnedClass in the CompositeUserType is List.class, the nullSafeSet method gets the collection as value argument. It is just a matter of getting the values from the list and assign them to the parameters in the prepared statement. (and fill with null if values are missing in the list of Qualities).
The nullSafeGet method is easyer. I just create a new ArrayList in which new Quality objects are inserted with values from the resultset.
I can add a full example if interested.