1

我有一个使用代表发布者对象的“类”标签的休眠映射。发布者字段之一是一个非常大的描述(最大 30k 字符)。我正在使用最大为 4k 字符的 oracle varchar 字段,因此我被迫将我的描述拆分为 8 个不同的字段(我被迫使用 varchar 字段类型 btw)。我不想隐藏这个数据库的复杂性,并且我的发布者对象中只有 1 个描述字段。

到目前为止,我发现的唯一方法是在休眠中使用 8 个描述字段映射一个“transit”对象,我可以在只有 1 个描述的最终发布者对象中手动复制该对象。

有人有更好的方法吗?

4

2 回答 2

0

我想您可以使用 Hibernate 的自定义 UserTypes 来“神奇地”将列组合成一个值。

一些文档的这一部分讨论了如何在从表中检索数据时组合两列来创建自定义货币类。这可能会让你开始。

http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/types.html#types-custom

我个人使用它从数据库中加载 blob,它工作得很好,一旦你将 UserType 写入并映射到你的数据库映射中,你的代码甚至不“知道”数据库中的实际物理类型。

于 2012-06-07T18:28:16.760 回答
0

为单个值使用 8 个字段确实很难看,但无论如何......

Hibernate 使用对象。对象使用封装。在您的实体中提供公共getDescription()setDescription()方法,并让这些方法将描述从/拆分到您的 8 个私有持久字段:

public String getDescription() {
    return join(desc1, desc2, ..., desc8);
}

public void setDescription(String description) {
    String[] s = split(description);
    desc1 = s[0];
    ...
    desc8 = s[7];
}
于 2012-06-07T18:28:54.577 回答