【发布时间】:2011-10-13 17:55:44
【问题描述】:
我以前从未真正使用 Java 枚举类来获取常量值,过去我通常使用“public final”方法。我现在已经开始使用枚举,并且我正在重写 toString() 方法以返回与枚举名称不同的值。
我有一些 JPA 代码,我在其中创建了一个带有命名参数的 TypedQuery,其中一个是枚举值的字符串表示形式。如果我只使用 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;
}
};
这是 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());
【问题讨论】:
-
可以将该字段的映射添加到问题中吗?
-
如果您正在寻找一种更简洁的编写方式,
query.setParameter("status", Status.ACTIVE+"");可以。 -
您的
@Entity中的字段是否为Status类型,是否用@Enumerated(EnumType.STRING)注释?如果是这样,您应该可以在查询中使用枚举。 -
@Entity 中的字段只是一个字符串,但它只会是 A、P 或 F 的值,所以我为这些值创建了一个枚举,以便在代码中,我可以使用 Status.ACTIVE 之类的东西,它会更具描述性。我认为重写 toString() 方法以返回实际值将返回一个 String 类型,而无需显式调用 toString()。