3

我已经四处寻找一些答案,但它们并没有让我足够满意。我希望这不会重复。

我有一个应用程序,其中的数据应该是恒定的。以后可以修改此数据,因此我当前的方法是使用具有此常量的单独表,该表从其他表中引用。例如,此表具有列 ID 和列值。而这个表是由一个带有 ID 和 Value 的 Java 对象来表示的。

当我想比较这个常量时,我​​的问题就来了。比较使用它的 ID 对我来说似乎很难看,所以我想使用枚举来比较它们。但这似乎很尴尬,因为我将在用作“类型”的类中使用 ENUM。所以我也在考虑 JPA 的 @enumerated 注释......但老实说,我没有看到最好的方法。我可以肯定的是,我绝对想要 - 不知何故 - 将这些常量数据存储在数据库中。

4

3 回答 3

2

在我的脑海中,我可以考虑以下方法。

  1. 创建enum并将其名称映射到 DB。这种方法很简单并且会奏效。它的缺点是数据库中的字符串太多。因此,如果枚举元素名称正在更改,您必须修复数据库。字符串占用空间。如果您想将此类字段用于查询条件,则需要对此类字段进行索引。
  2. 创建enum并将其序数映射到 DB。这也很简单,但是即使更改了枚举元素的一个顺序,数据库也需要维护。而且数据库数据的可读性较差。

#1 和 #2 都有共同的缺点:实际上数据存储了两次:一次硬编码为枚举。在数据库中两次。如果您必须修改数据,则必须在 2 个地方执行此操作。必须在开发期间进行修改,因为enum必须重新编译。

但是,还有其他解决方案可以提供所谓的“动态枚举”。看一看。可能此解决方案会对您有所帮助。

于 2012-11-13T13:35:15.160 回答
0

另一种选择是使用字符串字段将您的枚举存储到数据库表中,并在返回的路上将它们包装起来供其他对象使用。

例如以下之一:

将字符串转换为枚举?

http://www.vineetmanohar.com/2010/01/3-ways-to-serialize-java-enums/

于 2012-11-14T00:26:33.850 回答
0

以后可以修改的数据不再是恒定的,而是可变的...... ;-)

无论如何:如果可能的值列表可以随时间变化,我认为使用 Enums 和 @enumerated JPA 注释没有问题。

如果值本身可以更改,您将需要某种名称/值映射,以避免使用 ID 进行比较。您还可以将“属性”添加到 Enums,您可以将其用于数据的可变部分。这样,只有枚举的名称将作为常量字符串存储在数据库中(作为标识符),并且“值”可以在您的代码中更改。

http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

于 2012-11-13T14:05:53.323 回答