gpt4 book ai didi

java - 适合枚举的持久化数据

转载 作者:IT老高 更新时间:2023-10-28 20:41:46 25 4
gpt4 key购买 nike

大多数项目都有某种数据,这些数据在版本之间基本上是静态的,非常适合用作枚举,例如状态、事务类型、错误代码等。例如,我将只使用一个常见的状态枚举:

public enum Status {
ACTIVE(10, "Active");
EXPIRED(11, "Expired");
/* other statuses... */

/* constructors, getters, etc. */
}

我想知道其他人在对此类数据的持久性方面做了什么。我看到了几个选项,每个选项都有一些明显的优点和缺点:

  • 将可能的状态保存在状态表中,并缓存所有可能的状态域对象以供在整个应用程序中使用
  • 只使用枚举,不持久化可用状态列表,在我和我的 DBA 之间制造了一场数据一致性圣战
  • 保持状态并在代码中维护一个枚举,但不要将它们捆绑在一起,创建重复数据

我的偏好是第二个选项,尽管我的 DBA 声称我们的最终用户可能希望访问原始数据以生成报告,并且不持久化状态会导致数据模型不完整(反驳:这可以解决有文档)。

这里有大多数人使用的约定吗?人们对每种方法的体验如何?还有其他选择吗?

编辑:

考虑了一段时间后,我真正的持久性斗争来自于处理与数据库中的状态相关的 id 值。这些值将在安装应用程序时作为默认数据插入。此时,他们将拥有可用作其他表中的外键的 id。我觉得我的代码需要了解这些 id,以便我可以轻松检索状态对象并将它们分配给其他对象。我该怎么办?我可以添加另一个字段,例如“代码”,以查找内容,或者仅按名称查找状态,这很恶心。

最佳答案

我们使用数据库中的一些显式字符串或字符值来存储枚举值。然后从数据库值返回枚举,我们在枚举类上编写一个静态方法来迭代并找到正确的。

如果您期望有很多枚举值,您可以创建一个静态映射 HashMap<String,MyEnum>快速翻译。

不要存储实际的枚举名称(即您的示例中的“ACTIVE”),因为开发人员很容易对其进行重构。

关于java - 适合枚举的持久化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/492096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com