【发布时间】:2010-10-04 06:34:57
【问题描述】:
大多数项目都有某种数据,这些数据在发布之间基本上是静态的,非常适合用作枚举,例如状态、事务类型、错误代码等。例如,我将只使用一个常见的状态枚举:
public enum Status {
ACTIVE(10, "Active");
EXPIRED(11, "Expired");
/* other statuses... */
/* constructors, getters, etc. */
}
我想知道其他人在对此类数据的持久性方面做了什么。我看到了几个选项,每个选项都有一些明显的优点和缺点:
- 将可能的状态保存在状态表中,并将所有可能的状态域对象缓存起来以供整个应用程序使用
- 只使用枚举而不持久化可用状态列表,在我和我的 DBA 之间制造了一场数据一致性圣战
- 保持状态并在代码中维护一个枚举,但不要将它们捆绑在一起,从而创建重复数据
我的偏好是第二个选项,尽管我的 DBA 声称我们的最终用户可能希望访问原始数据以生成报告,并且不持久化状态会导致数据模型不完整(反驳:这可以解决有文档)。
这里有大多数人使用的约定吗?人们对每种方法的体验如何?还有其他选择吗?
编辑:
经过一段时间的思考,我真正的持久性斗争来自于处理与数据库中的状态相关的 id 值。这些值将在安装应用程序时作为默认数据插入。此时,他们将拥有可用作其他表中的外键的 id。我觉得我的代码需要知道这些 id,以便我可以轻松地检索状态对象并将它们分配给其他对象。我该怎么办?我可以添加另一个字段,例如“代码”,以查找内容,或者仅按名称查找状态,这很恶心。
【问题讨论】:
-
感谢所有的答案 - 已经提出了许多不同的解决方案,所有这些都有一些好处。我将让赞成票决定赏金,因为我更喜欢社区的意见,而不是我自己的偏好。
标签: java types enums persistence