有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

我的问题可能是“哪种风格最好?”类别:如何在数据库中存储这些参数(它们可能是字符串和数字,需要根据区域设置进行格式化)?我正在使用Hibernate执行ORM,我可以想到以下解决方案:

  • 构建一个组合字符串并保存它(我认为这很难看,很难维护)
  • 执行某种奇特的规范化,并使每个参数成为数据库中的一行(我想是干净的,但是性能噩梦)
  • 将参数放入数组、映射或其他Java数据结构中,并以二进制格式保存(可能会导致大量开销)

我倾向于选项3,但我担心它可能会在数据库的大小方面花费太大。你觉得怎么样


共 (4) 个答案

  1. # 1 楼答案

    进行标准化。 我建议如下:

    表消息 身份证

    表参数 消息id 钥匙 价值观

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

    性能影响并没有那么大,因为您可以使用联接在单个选择中获取所有内容

  2. # 2 楼答案

    如果您能够承受使用规范化方法(使用单独的表)对性能的影响,我会选择这种方法。我们在工作中使用了与您的第一个建议相同的方法,它会变得混乱,尤其是当您达到列限制并且键/值开始被截断时

  3. # 3 楼答案

    这要看情况而定。每个实体的参数数量庞大吗?如果不太可能,第二种选择是最好的

    如果您不想添加由延迟加载引起的额外查询,您可以随时更改参数数量可变的fetch type,该参数只会向您一直在执行的查询添加一个联接。在正常情况下,这不是一个大的代价

    第三条和第一条永远禁止对参数进行任何类型的查询。我不愿意为未来支付巨额技术债务

  4. # 4 楼答案

    直接将其作为字符串保存