我应该如何在 JavaDB 中存储 Java 枚举?
我应该如何在 JavaDB 中存储 Java 枚举?
我是否应该尝试将枚举映射到 SMALLINT 并仅将值保留在源代码中?嵌入式数据库仅由单个应用程序使用。或者我应该将值存储为DECIMAL
?这些解决方案对我来说都感觉不好/稳健。有更好的选择吗?
这是我的枚举:
import java.math.BigDecimal;
public enum Vat {
NORMAL(new BigDecimal("0.25")),
FOOD(new BigDecimal("0.12")),
BOOKS(new BigDecimal("0.06")),
NONE(new BigDecimal("0.00"));
private final BigDecimal value;
Vat(BigDecimal val) {
value = val;
}
public BigDecimal getValue() {
return value;
}
}
我已经阅读过有关此主题的其他类似问题,但问题或解决方案与我的问题不匹配。 数据库字段中的枚举存储,在数据库中存储枚举的最佳方法,在数据库中存储枚举值的最佳方式 - String 或 Int
How should I store an Java Enum in JavaDB?
Should I try to map the enums to SMALLINT
and keep the values in source code only? The embedded database is only used by a single application. Or should I just store the values as DECIMAL
? None of these solutions feels good/robust for me. Is there any better alternatives?
Here is my enum:
import java.math.BigDecimal;
public enum Vat {
NORMAL(new BigDecimal("0.25")),
FOOD(new BigDecimal("0.12")),
BOOKS(new BigDecimal("0.06")),
NONE(new BigDecimal("0.00"));
private final BigDecimal value;
Vat(BigDecimal val) {
value = val;
}
public BigDecimal getValue() {
return value;
}
}
I have read other similar questions on this topic, but the problem or solution doesn't match my problem. Enum storage in Database field, Best method to store Enum in Database, Best way to store enum values in database - String or Int
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 JPA 中,您有两种选择:
按名称;
按序数(整数)。
我不喜欢(2)。如果您更改枚举的顺序,它就会中断。因此,更常见的是使用 (1)(根据我的经验)。
我也会在 JavaDB 中做同样的事情。只需将枚举名称存储为文本即可。它的优点是您可以查看一行并知道它的含义,而不是试图找出 status_id 列中“3”的含义。
如果您担心空间(99% 的情况下我不会),请使用整数或使用代码。例如:
In JPA, you have two choices:
By name;
By ordinal (integer).
I don't like (2). If you change the order of your enum it breaks. As such it's more common to use (1) (in my experience).
I would do the same in JavaDB. Just store the enum name as text. It has the advantage that you can look at a row and know what it means rather than trying to figure out what "3" means in the status_id column.
If you're concerned about space (and 99% of the time I wouldn't be) either use an integer or use a code. For example:
我的偏好是执行以下操作:
优点
如果您的 java 枚举已损坏
定义更改(例如,如果您
更改值的顺序)。
通过检查初始化
Java 枚举定义匹配
YourEnum
表的内容。这与 cletus 的解决方案类似,只不过枚举编码显式存储在数据库中,而不是定义为枚举定义的一部分。
My preference is to do as follows:
Advantages
corrupted if your java enum
definition changes (e.g. if you
change the ordering of the values).
initialisation by checking that the
Java enum definition matches the
contents of the
YourEnum
table.This is similar to cletus's solution except that the enum encoding is stored explicitly in the database rather than being defined as part of the enum definition.