我正在尝试将一个枚举字段保存到数据库,但是我在将该字段映射到数据库时遇到了问题。我的代码如下:
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]);
但仅如果inbStatus
为0
或1
。您应该始终验证用户输入的空值和无效值。
关于java - 在 Hibernate 中保存枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21168335/