与Hibernate一起使用Java数据结构来存储未知数量的参数?

时间:2010-03-16 07:58:01

标签: java hibernate

以下问题:我想根据本地化文本呈现短消息的新闻流。在这些消息的不同位置,我必须插入参数来“自定义”它们。我猜你知道我的意思;)

我的问题可能属于“哪种方式最好?” category:如何在数据库中存储这些参数(它们可能是需要根据Locale格式化的字符串和数字)?我正在使用Hibernate来做ORM,我可以想到以下解决方案:

  • 构建一个组合的String并将其保存(我认为难看且难以维护)
  • 做一些花哨的规范化,并在数据库中将每个参数都设为一行(干净,我猜,但是性能噩梦)
  • 将params放入Array,Map或其他Java数据结构中并以二进制格式保存(可能会导致大量开销)

我倾向于选项#3,但我担心数据库中的大小可能会很昂贵。你觉得怎么样?

4 个答案:

答案 0 :(得分:3)

如果您能够承受使用标准化方法获得单独表格的性能影响,我会采用这种方法。我们使用与您工作中的第一个建议相同的方法,它会凌乱,尤其是当您达到列限制并且键/值开始被截断时!

答案 1 :(得分:1)

进行规范化。 我会建议像:

表格消息    ID

表参数    MESSAGE_ID    键    值

在大多数情况下,将序列化的Java对象存储在数据库中是一件非常糟糕的事情。因为它们难以维护,您无法使用“简单”SQL工具访问它们。

性能影响不是很大,因为您可以使用连接在一个选择中一起获取所有内容。

答案 2 :(得分:1)

这有点依赖。每个实体的参数数量都很大吗?如果不可能第二种选择是最好的。

如果您不想添加由延迟加载引起的额外查询,您可以随时更改可变数量的参数的获取类型,这些参数只会将一个连接添加到您一直在执行的查询中。在正常情况下,这不是一个很大的代价。

此外,第三个和第一个禁止对参数进行任何类型的查询。对于未来的巨额技术债务我不愿意支付。

答案 3 :(得分:0)

直接把它作为字符串并保存..