gpt4 book ai didi

java - 我应该如何在 JavaDB 中存储 Java 枚举?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:11:06 25 4
gpt4 key购买 nike

我应该如何在 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;
}
}

我已经阅读了关于该主题的其他类似问题,但问题或解决方案与我的问题不符。 Enum storage in Database field , Best method to store Enum in Database , Best way to store enum values in database - String or Int

最佳答案

在 JPA 中,您有两种选择:

  1. 按姓名;

  2. 按序数(整数)。

我不喜欢 (2)。如果您更改枚举的顺序,它就会中断。因此,使用 (1) 更为常见(根据我的经验)。

我会在 JavaDB 中做同样的事情。只需将枚举名称存储为文本。它的优点是您可以查看一行并知道它的含义,而不是试图弄清楚 status_id 列中的“3”是什么意思。

如果您担心空间(99% 的情况下我不会担心),请使用整数或代码。例如:

public enum Vat {
NORMAL(new BigDecimal("0.25")),
FOOD(new BigDecimal("0.12")),
BOOKS(new BigDecimal("0.06")),
NONE(new BigDecimal("0.00"));

private static final Map<String, Vat> LOOKUP = new HashMap<String, Vat>();

static {
Vat[] values = values();
for (Vat vat : values) {
LOOKUP.put(vat.code, vat);
}
}

private final String code;
private final String value;

private Vat(String code, BigDecimal value) {
this.code = code;
this.value = value;
}

public String getCode() { return code; }
public String getValue() { return value; }

public Vat fromCode(String code) {
return LOOKUP.get(code);
}
}

关于java - 我应该如何在 JavaDB 中存储 Java 枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2801953/

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