大多数项目的某些数据在版本之间基本上是静态的,并且非常适合用作枚举,例如状态,事务类型,错误代码等。例如,我只使用一个通用的状态枚举:
public enum Status { ACTIVE(10, "Active"); EXPIRED(11, "Expired"); /* other statuses... */ /* constructors, getters, etc. */ }
我想知道其他人在处理此类数据方面的持久性。我看到一些选择,每个选择都有明显的优点和缺点:
我的选择是第二种选择,尽管我的DBA声称我们的最终用户可能希望访问原始数据以生成报告,并且不保留状态将导致数据模型不完整(反参数:这可以通过文档解决)。 。
大多数人在这里使用惯例吗?人们对每种事物的体验是什么,还有其他选择吗?
编辑:
考虑了一会儿之后,我真正的持久性奋斗在于处理与数据库状态相关的id值。这些值将在安装应用程序时作为默认数据插入。此时,它们将具有可在其他表中用作外键的ID。我觉得我的代码需要了解这些ID,以便可以轻松检索状态对象并将其分配给其他对象。我该怎么办?我可以添加另一个字段,例如“代码”,以查找内容,或者仅按名称查找状态,这很麻烦。
我们使用一些显式的字符串或字符值在数据库中存储枚举值。然后,从数据库值返回到枚举,我们在枚举类上编写了一个静态方法以进行迭代并找到合适的方法。
如果期望很多枚举值,则可以创建一个静态映射HashMap<String,MyEnum>来快速转换。
HashMap<String,MyEnum>
不要存储实际的枚举名称(在您的示例中为“ ACTIVE”),因为开发人员很容易将其重构。