java - 在 Hibernate 中保存枚举

标签 java hibernate enums

我正在尝试将一个枚举字段保存到数据库,但是我在将该字段映射到数据库时遇到了问题。我的代码如下:

public enum InvoiceStatus {
PAID,
UNPAID;
}

我在我的一个应用程序类中使用这个枚举,如下所示:

public class Invoice {

Enumerated(EnumType.ORDINAL)
@Column(name="INVOICE_STATUS", nullable = false, unique=false)
private InvoiceStatus invoiceStatus;

}

最后,我让应用用户使用下拉菜单从 View (JSP) 中选择发票状态。

但我不确定如何将从下拉菜单选择中收到的值映射到发票状态字段

我尝试将接收到的值映射为 short 如下,但它不会编译

invoice.setInvoiceStatus(Short.parseShort(request.getParameter("inbStatus")));

有人可以告诉我如何将从 View 接收到的数据映射到枚举字段吗?

最佳答案

枚举序数值是从零开始的索引。在你的情况下:

PAID = 0
UNPAID = 1

所以下面的代码会返回PAID:

int invoiceStatus = 0;
invoice.setInvoiceStatus(InvoiceStatus.values()[invoiceStatus]);

下面的代码将返回UNPAID:

int invoiceStatus = 1;
invoice.setInvoiceStatus(InvoiceStatus.values()[invoiceStatus]);

这意味着你应该能够这样做:

short invoiceStatus = Short.parseShort(request.getParameter("inbStatus"));
invoice.setInvoiceStatus(InvoiceStatus.values()[invoiceStatus]);

如果inbStatus01。您应该始终验证用户输入的空值和无效值。

关于java - 在 Hibernate 中保存枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21168335/

相关文章:

java - 如何运行 App Engine Cloud Endpoints 的临时环境?

c# - 如何为给定的 sql 查询创建条件查询

c++ - 在 C++ 中的 vector 中的结构中搜索枚举

java - 当枚举被声明为通用参数时获取枚举的 values()

java - 如何防止XSS攻击

java - 如何录制音频,以使其在达到特定长度后覆盖录制的开始?

java - 有人能解释一下为什么我在 Java 中遇到这个错误吗?

java - 即使数据库已关闭,如何使应用服务器启动?

hibernate - findAll()不返回正确的对象类型

java - 枚举与其他枚举作为类型