Pat*_*ard 5 java enums jpa tostring
我之前从未真正使用Java枚举类来获取常量值,我过去通常使用"公共最终"方法.我现在开始使用枚举,并且我重写了toString()方法以返回与枚举名称不同的值.
我有一些JPA代码,我在其中创建一个带有命名参数的TypedQuery,其中一个是枚举值的String表示.如果我只使用Status.ACTIVE设置参数,我会得到正确的"A"值,但会抛出异常,因为它的类型实际上是Status而不是String.它只有在我显式调用toString()方法时才有效.我认为简单地重写toString()方法会导致返回一个String类型,无论类类型是什么.
这是枚举:
public enum Status {
ACTIVE ("A"),
PENDING ("P"),
FINISHED ("F");
private final String value;
Status(String value) {
this.value = value;
}
public String toString() {
return value;
}
};
Run Code Online (Sandbox Code Playgroud)
这是TypedQuery:
TypedQuery<MechanicTimeEvent> query = entityManager().createQuery("SELECT o FROM MechanicTimeEvent o WHERE o.id.mechanicNumber = :mechanicNumber AND o.id.status = :status", MechanicTimeEvent.class);
query.setParameter("mechanicNumber", mechanicNumber);
query.setParameter("status", Status.ACTIVE.toString());
Run Code Online (Sandbox Code Playgroud)
小智 5
public enum Status {
ACTIVE,
PENDING,
FINISHED;
@Override
public String toString() {
String name = "";
switch (ordinal()) {
case 0:
name = "A";
break;
case 1:
name = "P";
break;
case 2:
name = "F";
break;
default:
name = "";
break;
}
return name;
}
};
Run Code Online (Sandbox Code Playgroud)
MechanicTimeEvent bean 的字段是status枚举类型吗?如果不是,我建议将其更改为 enum 类型Status。
你可以用它来注释它@Enumerated(EnumType.STRING)
此外,我建议删除枚举的值部分,只使用如下名称:
public enum Status {
ACTIVE,
PENDING,
FINISHED;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18144 次 |
| 最近记录: |